Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Sprawdź, czy wiersz istnieje w bazie danych przed wstawieniem

Lepiej ustawić ograniczenie na kolumny, aby zapobiec duplikowaniu danych, zamiast sprawdzania i wstawiania.

Po prostu ustaw UNIKALNE ograniczenie dla imdbid :

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

Powodem tego jest to, że nie wpadniesz w warunek wyścigu .

Pomiędzy zakończeniem sprawdzania a faktycznym wstawieniem danych jest małe okno, w którym mogą zostać wstawione dane, które będą kolidować z danymi, które mają zostać wstawione.

Rozwiązanie? Użyj ograniczeń i sprawdź $DBH->error() za błędy wstawiania. Jeśli są jakieś błędy, wiesz, że istnieje duplikat i możesz wtedy powiadomić swojego użytkownika.

Zauważyłem, że używasz tego, $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); . W takim przypadku nie musisz sprawdzać ->error() ponieważ PDO zgłosi wyjątek. Po prostu zawiń swoje wykonanie, spróbuj i złap w ten sposób:

$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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. skrypt do konwersji pliku sql zrzutu mysql do formatu, który można zaimportować do sqlite3 db

  2. Jak zastąpić MySQL Perconą w Plesk CentOS 7?

  3. Jak obliczyć sumę bieżącą w MySQL

  4. JOIN vs. WHERE:Dlaczego dwa zapytania, które uzyskują identyczne wyniki, wykazują 3-4 rzędy różnicy w wydajności?

  5. Obsługa Homebrew, MySQL 8