Il est préférable de définir une contrainte sur vos colonnes pour éviter les données en double au lieu de vérifier et d'insérer.
Définissez simplement une contrainte UNIQUE sur imdbid
:
ALTER TABLE `requests` ADD UNIQUE `imdbid_unique`(`imdbid`);
La raison de le faire est de ne pas vous heurter à une condition de course .
Il y a une petite fenêtre entre la fin de la vérification et l'insertion des données, et dans cette petite fenêtre, des données pourraient être insérées qui entreront en conflit avec les données à insérer.
Solution? Utilisez des contraintes et vérifiez $DBH->error()
pour les erreurs d'insertion. S'il y a des erreurs, vous savez qu'il y a un doublon et vous pouvez alors en informer votre utilisateur.
J'ai remarqué que vous utilisez ceci, $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
. Dans ce cas, vous n'avez pas besoin de vérifier ->error()
car PDO lèvera une exception. Enveloppez simplement votre exécution avec try and catch comme ceci :
$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>";