Det er bedre at sætte en begrænsning på dine kolonner for at forhindre duplikerede data i stedet for at kontrollere og indsætte.
Indstil blot en UNIK begrænsning på imdbid
:
ALTER TABLE `requests` ADD UNIQUE `imdbid_unique`(`imdbid`);
Grunden til at gøre dette er, at du ikke løber ind i en løbstilstand .
Der er et lille vindue mellem at afslutte kontrollen og faktisk indsætte dataene, og i det lille vindue kan der indsættes data, som vil være i konflikt med de data, der skal indsættes.
Opløsning? Brug begrænsninger og tjek $DBH->error()
for indsættelsesfejl. Hvis der er nogen fejl, ved du, at der er en dublet, og du kan underrette din bruger derefter.
Jeg har bemærket, at du bruger denne, $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
. I dette tilfælde behøver du ikke kontrollere ->error()
fordi PDO vil kaste en undtagelse. Bare indpak din udførelse med prøv og fang sådan her:
$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>";