ON DUPLICATE KEY UPDATE
führt einfach das SET
aus Angaben, die Sie ihm im Falle eines Zweitschlüssels machen. Es vergleicht keine einzelnen Spaltenwerte und aktualisiert nur die unterschiedlichen. Es klingt so, als würde es für das funktionieren, was Sie tun möchten, solange Sie die richtige(n) Spalte(n) als UNIQUE KEY
definiert haben oder PRIMARY KEY
.
Normalerweise führe ich jedoch die Einfügung aus und fange dann den Fehler ab und führe bei Bedarf eine andere Aktion aus. Dies hat den Nachteil, dass 2 Abfragen ausgegeben werden, wenn es ein Duplikat gibt, aber meiner Meinung nach ist es viel wartungsfreundlicher.
Beispiel:
$db = new PDO($dsn, $user, $pass);
$stmt = $db->prepare('INSERT INTO some_tbl (col1,col2,col3) VALUES (?,?,?)');
$values = array('Col 1 value','Col 2 Value', 'Col 3 Value');
try {
$db->execute($values);
} catch (PDOException $e) {
if($e->getCode() == 23000){
// dupe key do some other action whether update or otherwise
} else {
// rethrow non dupe errors
throw $e;
}
}