Add upsert function

This commit is contained in:
2024-05-25 12:20:03 +02:00
parent ee8c32ee27
commit 3b5808523d

View File

@@ -483,6 +483,29 @@ class Db extends PhpObject
return $iTableId; return $iTableId;
} }
/**
* Unlike insertUpdateRow, this function depends on the table defined UNIQUE KEY
* and not on the custom-defined $asKeys table
*/
public function upsertRow($sTableName, $asData, $asUpdateFields)
{
$this->cleanSql($sTableName);
$this->cleanSql($asData);
$this->cleanSql($asUpdateFields);
$asQueryValues = $this->addQuotes($asData);
$asUpdateValues = array_intersect_key($asData, array_flip($asUpdateFields));
$sQuery =
"INSERT INTO ".$sTableName." (`".implode("`, `", array_keys($asQueryValues))."`) ".
"VALUES (".implode(", ", $asQueryValues).") ".
"ON DUPLICATE KEY UPDATE ".$this->implodeAll($asUpdateValues, " = ", ", ");
die($sQuery);
return $this->setQuery($sQuery)?$this->getLastId():0;
}
public function selectInsert($sTableName, $asData, $asKeys=array()) public function selectInsert($sTableName, $asData, $asKeys=array())
{ {
return $this->insertUpdateRow($sTableName, $asData, $asKeys, false); return $this->insertUpdateRow($sTableName, $asData, $asKeys, false);