一意として定義されている電子メールアドレスのフィールドを持つMySQLテーブルがあります。この例では、私のフォームが行うのは、ユーザーが自分の電子メールアドレスをテーブルに挿入できるようにすることだけだとしましょう。
電子メールフィールドは一意であるため、同じ電子メールを2回入力しようとすると、クエリは失敗するはずです。2つのシナリオ間のトレードオフについて知りたいです。
1)挿入を実行する前に、クイックSELECT
ステートメントを実行します。INSERT
selectが結果を返す場合は、ユーザーに通知し、ステートメントを実行しないでください。
2)INSERT
ステートメントを実行し、重複エントリエラーがないか確認します
// snippet uses PDO
if (!$prep->execute($values))
{
$err = $prep->errorInfo();
if (isset($err[1]))
{
// 1062 - Duplicate entry
if ($err[1] == 1062)
echo 'This email already exists.';
}
}
また、通常の使用を想定してください。つまり、重複するエントリは最小限に抑える必要があります。したがって、最初のシナリオでは、挿入ごとに追加のクエリを実行するオーバーヘッドがあるのは明らかですが、 2番目のシナリオではエラー処理に依存しています。
また、コーディングスタイルについての考えを聞きたいです。私の心は言う'防御的なプログラマーになりなさい!挿入する前にデータを確認してください!」私の脳は「うーん、MySQLにデータのチェックを任せたほうがいいかもしれない」と言っています。
編集-これは「これをどのように行うか」の質問ではなく、「なぜこれを特定の方法で行う必要があるのか」という質問であることに注意してください。私が含めた小さなコードスニペットは機能しますが、私が興味を持っているのは、問題を解決するための最良の方法です。