Det är bättre att sätta en begränsning på dina kolumner för att förhindra dubbletter av data istället för att kontrollera och infoga.
Ange bara en UNIK begränsning på imdbid
:
ALTER TABLE `requests` ADD UNIQUE `imdbid_unique`(`imdbid`);
Anledningen till att du gör detta är så att du inte stöter på ett racetillstånd .
Det finns ett litet fönster mellan att slutföra kontrollen och att faktiskt infoga data, och i det lilla fönstret kan data infogas som kommer i konflikt med data som ska infogas.
Lösning? Använd begränsningar och kontrollera $DBH->error()
för insättningsfel. Om det finns några fel vet du att det finns en dubblett och du kan meddela din användare då.
Jag märkte att du använder detta, $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
. I det här fallet behöver du inte kontrollera ->error()
eftersom PDO kommer att ge ett undantag. Lägg bara in din exekvering med try and catch så här:
$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>";