ON DUPLICATE KEY UPDATE
voert eenvoudig de SET
. uit verklaringen die u eraan geeft in het geval van een duplicaatsleutel. Het vergelijkt geen afzonderlijke kolomwaarden en werkt alleen de verschillende bij. Het klinkt alsof het zal werken voor wat je wilt doen, zolang je de juiste kolom(men) hebt gedefinieerd als UNIQUE KEY
of PRIMARY KEY
.
Wat ik echter normaal doe, is de insert uitvoeren en vervolgens de fout opvangen en een andere actie uitvoeren als dat nodig is. Dit heeft als nadeel dat er twee vragen worden gesteld als er een duplicaat is, maar naar mijn mening is het veel beter te onderhouden.
Voorbeeld:
$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;
}
}