Es mejor establecer una restricción en sus columnas para evitar datos duplicados en lugar de verificar e insertar.
Simplemente establezca una restricción ÚNICA en imdbid
:
ALTER TABLE `requests` ADD UNIQUE `imdbid_unique`(`imdbid`);
La razón para hacer esto es para que no te encuentres con una condición de carrera .
Hay una pequeña ventana entre la finalización de la verificación y la inserción real de los datos, y en esa pequeña ventana, se pueden insertar datos que entrarán en conflicto con los datos que se insertarán.
¿Solución? Use restricciones y marque $DBH->error()
por errores de inserción. Si hay algún error, sabe que hay un duplicado y puede notificar a su usuario entonces.
Noté que estás usando esto, $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
. En este caso, no necesita marcar ->error()
porque PDO lanzará una excepción. Simplemente ajuste su ejecución con try and catch así:
$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>";