ON DUPLICATE KEY UPDATE
udfører blot SET
erklæringer, du giver den i tilfælde af en dubletnøgle. Den sammenligner ikke individuelle kolonneværdier og opdaterer kun de forskellige. Det lyder som om det vil fungere til det, du vil gøre, så længe du har den eller de rigtige kolonner defineret som UNIQUE KEY
eller PRIMARY KEY
.
Men det, jeg normalt gør, er at køre indsættelsen og derefter fange fejlen og udføre en anden handling, hvis jeg har brug for det. Dette har den negative side ved at udstede 2 forespørgsler, hvis der er en dublet, men efter min mening er det meget mere vedligeholdeligt.
Eksempel:
$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;
}
}