Mysql
 sql >> база данни >  >> RDS >> Mysql

Проверете дали редът съществува в базата данни, преди да го вмъкнете

По-добре е да зададете ограничение на колоните си, за да предотвратите дублиране на данни, вместо да проверявате и вмъквате.

Просто задайте УНИКАЛНО ограничение за imdbid :

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

Причината да направите това е, за да не се натъкнете на състояние на състезанието .

Между завършването на проверката и действителното вмъкване на данните има малък прозорец и в този малък прозорец могат да бъдат вмъкнати данни, които ще противоречат на данните, които предстои да бъдат вмъкнати.

Решение? Използвайте ограничения и проверете $DBH->error() за грешки при вмъкване. Ако има някакви грешки, знаете, че има дубликат и тогава можете да уведомите потребителя си.

Забелязах, че използвате това, $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); . В този случай не е необходимо да проверявате ->error() защото PDO ще хвърли изключение. Просто обвийте изпълнението си с try and catch по следния начин:

$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. Как да потвърдите идентификационните данни за влизане на потребителя в android с помощта на PHP, MySql с помощта на json

  2. Свържете се с MySQL отдалечено

  3. MySQL таблица с фиксиран брой редове?

  4. MySQL:как да получите разликата между две времеви марки в секунди

  5. MySQL заявка за текущо време по GMT