ON DUPLICATE KEY UPDATE
utför helt enkelt SET
uttalanden som du tillhandahåller den i fallet med en dubblettnyckel. Den jämför inte enskilda kolumnvärden och uppdaterar bara de olika. Det låter som att det fungerar för det du vill göra så länge du har rätt kolumn(er) definierade som UNIQUE KEY
eller PRIMARY KEY
.
Men vad jag normalt gör är att köra infogningen och sedan fånga felet och utföra en annan åtgärd om jag behöver. Detta har nackdelen med att utfärda två frågor om det finns en dubblett, men enligt min mening är det mycket mer underhållbart.
Exempel:
$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;
}
}