sql >> Database >  >> RDS >> Mysql

Controleer of de rij in de database bestaat voordat u deze invoegt

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>";


  1. Hoe het fragment genereren zoals dat door Google is gegenereerd met PHP en MySQL?

  2. MySQL-zelfstudie - MySQL-serverlogboeken beheren:roteren, comprimeren, behouden en verwijderen

  3. Hoe te detecteren of een waarde ten minste één numeriek cijfer bevat in MariaDB

  4. Een beperking om het invoegen van een lege string in MySQL te voorkomen