Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PDO SQL-State 00000 aber immer noch Fehler?

Das liegt daran, dass $pdo->errorInfo() bezieht sich auf die letzte erfolgreich ausgeführte Anweisung. Da $sql->execute() false zurückgibt, kann es sich nicht auf diese Anweisung beziehen (entweder auf nichts oder auf die Abfrage davor).

Warum $sql->execute() gibt false zurück, ich weiß nicht ... entweder gibt es ein Problem mit Ihren $params array oder mit Ihrer Datenbankverbindung.

Hinweis:Das PHP-Handbuch (http://php.net/manual/en/pdo .errorinfo.php ) definiert nicht genau, was „letzte Operation auf dem Datenbank-Handle“ bedeutet, aber wenn es ein Problem mit Bindungsparametern gegeben hätte, wäre dieser Fehler innerhalb von PDO und ohne Interaktion mit der Datenbank aufgetreten. Man kann mit Sicherheit sagen, dass wenn $pdo->execute() gibt true zurück , dass $pdo->errorInfo() ist gültig. Wenn $pdo->execute() gibt false zurück , das Verhalten von $pdo->errorInfo() geht aus der Dokumentation nicht explizit hervor. Wenn ich mich aus meiner Erfahrung richtig erinnere, gibt execute true zurück , selbst wenn MySQL einen Fehler zurückgegeben hat, gibt false zurück wenn keine Operation durchgeführt wurde. Da die Dokumentation nicht spezifisch ist, könnte sie db-treiberspezifisch sein.

Diese Antwort spiegelt praktische Erfahrungen zum Zeitpunkt ihrer Erstellung im September 2012 wider. Wie ein Benutzer darauf hingewiesen hat, bestätigt die Dokumentation diese Interpretation nicht ausdrücklich. Es kann auch nur die spezielle Implementierung des Datenbanktreibers widerspiegeln, aber es sollte immer wahr sein, dass wenn $pdo->execute() gibt true zurück , dass $pdo->errorInfo() ist gültig.

Vielleicht möchten Sie auch PDO::ERRMODE_EXCEPTION setzen in Ihrer Verbindungssequenz. Die Ausnahmebehandlung macht es unnötig, den Fehler zu prüfen und abzufragen.

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