Lebih baik untuk menetapkan batasan pada kolom Anda untuk mencegah duplikat data daripada memeriksa dan menyisipkan.
Cukup tetapkan batasan UNIK pada imdbid
:
ALTER TABLE `requests` ADD UNIQUE `imdbid_unique`(`imdbid`);
Alasan melakukan ini adalah agar Anda tidak mengalami kondisi balapan .
Ada jendela kecil antara menyelesaikan pemeriksaan, dan benar-benar memasukkan data, dan di jendela kecil itu, data dapat dimasukkan yang akan bertentangan dengan data yang akan dimasukkan.
Larutan? Gunakan batasan dan periksa $DBH->error()
untuk kesalahan penyisipan. Jika ada kesalahan, Anda tahu bahwa ada duplikat dan Anda dapat memberi tahu pengguna Anda.
Saya perhatikan bahwa Anda menggunakan ini, $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
. Dalam hal ini, Anda tidak perlu memeriksa ->error()
karena PDO akan melempar pengecualian. Bungkus saja eksekusi Anda dengan try and catch seperti ini:
$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>";