sql >> Databáze >  >> RDS >> Mysql

Před vložením zkontrolujte, zda řádek v databázi existuje

Je lepší nastavit omezení na sloupce, abyste zabránili duplicitním datům namísto kontroly a vkládání.

Stačí nastavit UNIKÁTNÍ omezení na imdbid :

ALTER TABLE `requests` ADD UNIQUE `imdbid_unique`(`imdbid`);

Důvodem je, abyste nenarazili na závodní podmínky .

Mezi dokončením kontroly a skutečným vložením dat je malé okénko a do tohoto malého okna by mohla být vložena data, která budou v konfliktu s daty, která mají být vložena.

Řešení? Použijte omezení a zkontrolujte $DBH->error() pro chyby vkládání. Pokud se vyskytnou nějaké chyby, víte, že existuje duplikát, a můžete o tom uživatele informovat.

Všiml jsem si, že používáte toto, $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); . V tomto případě nemusíte kontrolovat ->error() protože PDO vyvolá výjimku. Stačí zabalit popravu pokusem a chytit takto:

$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. Problém s rozsahem MySql s korelovanými poddotazy

  2. Odstraňte mnoho řádků z tabulky pomocí id v Mysql

  3. První pohled na nový odhad kardinality serveru SQL Server

  4. Oříznutí tuku protokolu transakcí