Het is beter om een beperking op uw kolommen in te stellen om dubbele gegevens te voorkomen in plaats van te controleren en in te voegen.
Stel gewoon een UNIEKE beperking in op imdbid
:
ALTER TABLE `requests` ADD UNIQUE `imdbid_unique`(`imdbid`);
De reden hiervoor is dat je niet in een raceconditie terechtkomt .
Er is een klein venster tussen het voltooien van de controle en het daadwerkelijk invoegen van de gegevens, en in dat kleine venster kunnen gegevens worden ingevoegd die in strijd zijn met de in te voegen gegevens.
Oplossing? Gebruik beperkingen en vink $DBH->error()
. aan voor invoegfouten. Als er fouten zijn, weet u dat er een duplicaat is en kunt u uw gebruiker hiervan op de hoogte stellen.
Ik heb gemerkt dat je dit gebruikt, $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
. In dit geval hoeft u ->error()
. niet aan te vinken omdat PDO een uitzondering zal genereren. Sluit je uitvoering gewoon af met try and catch als volgt:
$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>";