try catchブロックを使用してこれを実行できます:
try {
$prep->execute($values);
// do other things if successfully inserted
} catch (PDOException $e) {
if ($e->errorInfo[1] == 1062) {
// duplicate entry, do something else
} else {
// an error other than duplicate entry occurred
}
}
「INSERTIGNORE」や「INSERT...ON DUPLICATE KEY UPDATE」などの代替案を調べることもできますが、これらはMySQL固有であり、PDOを使用することの移植性に反すると思います。 。
編集:あなたの質問にもっと正式に答えるために、私にとって、ソリューション#1(防御プログラマー)を完全に使用すると、そもそも固有の制約のポイントが効果的に排除されます。したがって、MySQLにデータチェックを任せるというあなたの考えに同意します。