チェックして挿入するのではなく、データの重複を防ぐために列に制約を設定することをお勧めします。
imdbid
にUNIQUE制約を設定するだけです :
ALTER TABLE `requests` ADD UNIQUE `imdbid_unique`(`imdbid`);
これを行う理由は、競合状態 に遭遇しないようにするためです。 。
チェックを終了してから実際にデータを挿入するまでの間に小さなウィンドウがあり、その小さなウィンドウに、挿入されるデータと競合するデータが挿入される可能性があります。
解決?制約を使用して、$DBH->error()
を確認します 挿入エラーの場合。エラーがある場合は、重複していることがわかっているので、ユーザーに通知できます。
これを使用していることに気づきました。$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
。この場合、->error()
をチェックする必要はありません。 PDOが例外をスローするためです。次のように、実行をtryandcatchでラップするだけです。
$duplicate = false;
try {
$STH->execute();
} catch (Exception $e) {
echo "<p>Failed to Request ".$_POST['imdbid']."!</p>";
$duplicate = true;
}
if (!$duplicate)
echo "<p>Successfully Requested ".$_POST['imdbid']."! Thanks!</p>";