ON DUPLICATE KEY UPDATE
SET
を実行するだけです キーが重複している場合に提供するステートメント。個々の列の値を比較するのではなく、異なる列の値を更新するだけです。 UNIQUE KEY
として定義された適切な列がある限り、やりたいことがうまくいくように聞こえます。 またはPRIMARY KEY
。
ただし、私が通常行うことは、挿入を実行してからエラーをキャッチし、必要に応じて別のアクションを実行することです。これには、重複がある場合に2つのクエリを発行するという欠点がありますが、私の意見では、はるかに保守しやすくなっています。
例:
$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;
}
}