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

PDO SQL-stan 00000, ale nadal błąd?

Dzieje się tak, ponieważ $pdo->errorInfo() odnosi się do ostatniej instrukcji, która została pomyślnie wykonana. Od $sql->execute() zwraca wartość false, to nie może odnosić się do tego wyrażenia (ani do niczego, ani do wcześniejszego zapytania).

Dlaczego $sql->execute() zwraca false, nie wiem... albo jest problem z twoimi $params tablicy lub z połączeniem z bazą danych.

Uwaga:podręcznik PHP (http://php.net/manual/en/pdo .errorinfo.php ) nie definiuje dokładnie, co oznacza „ostatnia operacja na uchwycie bazy danych”, ale gdyby wystąpił problem z parametrami wiązania, błąd ten wystąpiłby wewnątrz PDO i bez interakcji z bazą danych. Można śmiało powiedzieć, że jeśli $pdo->execute() zwraca true , że $pdo->errorInfo() jest ważna. Jeśli $pdo->execute() zwraca false , zachowanie $pdo->errorInfo() nie wynika to wyraźnie z dokumentacji. Jeśli dobrze pamiętam z mojego doświadczenia, wykonanie zwraca true , nawet jeśli MySQL zwrócił błąd, zwraca false jeśli nie wykonano żadnej operacji. Ponieważ dokumentacja nie jest specyficzna, może być specyficzna dla sterownika db.

Ta odpowiedź odzwierciedla praktyczne doświadczenie, kiedy została napisana we wrześniu 2012 roku. Jak zauważył użytkownik, dokumentacja nie potwierdza wyraźnie tej interpretacji. Może również odzwierciedlać tylko konkretną implementację sterownika bazy danych, ale zawsze powinno być prawdą, że jeśli $pdo->execute() zwraca true , że $pdo->errorInfo() jest ważny.

Możesz także ustawić PDO::ERRMODE_EXCEPTION w sekwencji połączenia. Obsługa wyjątków sprawia, że ​​nie ma potrzeby sprawdzania i odpytywania błędu.

$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:zaznaczanie wierszy, w których kolumna jest pusta

  2. A.* nie znajduje się w GROUP BY z lewym sprzężeniem w konstruktorze zapytań laravel

  3. Entity Framework + generowanie klas MySQL

  4. Jak pobrać dane z 2 tabel?

  5. Jak wybrać pierwsze N ​​wierszy na grupę w MySQL?