sql >> Database teknologi >  >> RDS >> Mysql

Kontroller, om rækken findes i databasen, før du indsætter

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


  1. Vælg * fra tabel1, der ikke findes i tabel2 med betinget

  2. PostgreSQL installation på Docker

  3. hvordan man sletter aktive poster i databasen ved hjælp af kodetænder

  4. 6 funktioner til at få dagen, måneden og året fra en dato i SQL Server