ON DUPLICATE KEY UPDATE
cukup lakukan SET
pernyataan yang Anda berikan untuk itu dalam kasus kunci duplikat. Itu tidak membandingkan nilai kolom individual dan hanya memperbarui yang berbeda. Kedengarannya seperti itu akan berfungsi untuk apa yang ingin Anda lakukan selama Anda memiliki kolom yang tepat yang didefinisikan sebagai UNIQUE KEY
atau PRIMARY KEY
.
Namun, yang biasanya saya lakukan adalah menjalankan penyisipan dan kemudian menangkap kesalahan dan melakukan tindakan yang berbeda jika perlu. Ini memiliki sisi bawah mengeluarkan 2 pertanyaan jika ada duplikat tetapi menurut saya itu jauh lebih dapat dipertahankan.
Contoh:
$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;
}
}