ON DUPLICATE KEY UPDATE
effectue simplement le SET
relevés que vous lui fournissez en cas de clé en double. Il ne compare pas les valeurs de colonne individuelles et ne met à jour que les valeurs différentes. Il semble que cela fonctionnera pour ce que vous voulez faire tant que vous avez la ou les colonnes appropriées définies comme UNIQUE KEY
ou PRIMARY KEY
.
Cependant, ce que je fais normalement est d'exécuter l'insertion, puis de détecter l'erreur et d'effectuer une action différente si nécessaire. Cela a l'inconvénient d'émettre 2 requêtes s'il y a un doublon, mais à mon avis, c'est beaucoup plus facile à gérer.
Exemple :
$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;
}
}