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

Mein PDO-Statement funktioniert nicht

Manchmal erzeugt Ihr PDO-Code einen Fehler wie Call to a member function execute() oder ähnliches. Oder sogar ohne Fehler, aber die Abfrage funktioniert trotzdem nicht. Dies bedeutet, dass Ihre Abfrage nicht ausgeführt werden konnte.

Jedes Mal, wenn eine Abfrage fehlschlägt, gibt MySQL eine Fehlermeldung aus, die den Grund erklärt . Leider werden solche Fehler standardmäßig nicht an PHP übertragen, und Sie haben nur eine Stille oder eine oben erwähnte kryptische Fehlermeldung. Daher ist es sehr wichtig, PHP und PDO so zu konfigurieren, dass sie Ihnen MySQL-Fehler melden. Und sobald Sie die Fehlermeldung erhalten, ist es ein Kinderspiel, das Problem zu beheben.

Um detaillierte Informationen über das Problem zu erhalten, fügen Sie entweder die folgende Zeile in Ihren Code direkt nach connect

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

(wobei $dbh ist der Name Ihrer PDO-Instanzvariable) oder - besser - fügen Sie diesen Parameter als Verbindungsoption . Danach werden alle Datenbankfehler in PDO-Ausnahmen übersetzt, die, wenn sie in Ruhe gelassen würden, genauso wie normale PHP-Fehler fungieren würden.

Es besteht eine sehr geringe Wahrscheinlichkeit, dass im Falle eines bestimmten Fehlers keine Ausnahme ausgelöst wird. Wenn Ihre query() /prepare() oder execute() Aufruf gibt false zurück aber es gibt keine Ausnahme, überprüfen Sie die PDO::errorInfo() so,

 trigger_error("PDO errorInfo: ".$dbh->errorInfo());

Nachdem Sie die Fehlermeldung erhalten haben, müssen Sie sie lesen und verstehen. Es klingt zu offensichtlich, aber Lernende übersehen oft die Bedeutung der Fehlermeldung. Doch meistens erklärt es das Problem ziemlich einfach:

  • Sagen wir, wenn es heißt, dass eine bestimmte Tabelle nicht existiert, müssen Sie Rechtschreibung, Tippfehler und Groß-/Kleinschreibung überprüfen. Außerdem müssen Sie sicherstellen, dass sich Ihr PHP-Skript mit einer korrekten Datenbank verbindet
  • Oder, wenn es heißt, dass ein Fehler in der SQL-Syntax vorliegt, dann müssen Sie Ihr SQL untersuchen. Und die Problemstelle liegt genau davor der in der Fehlermeldung genannte Abfrageteil.

Sie müssen auch vertrauen die Fehlermeldung. Wenn es heißt, dass die Anzahl der Token nicht mit der Anzahl der gebundenen Variablen übereinstimmt, dann ist es so. Gleiches gilt für fehlende Tabellen oder Spalten. Vor die Wahl gestellt, ob es Ihr eigener Fehler ist oder die Fehlermeldung falsch ist, bleiben Sie immer bei ersterem. Auch das klingt herablassend, aber Hunderte von Fragen auf genau dieser Seite beweisen, dass dieser Ratschlag äußerst nützlich ist.

Beachten Sie, dass Sie, um PDO-Fehler sehen zu können, in der Lage sein müssen, PHP-Fehler im Allgemeinen zu sehen. Dazu müssen Sie PHP abhängig von der Site-Umgebung konfigurieren:

  • auf einer Entwicklung Server ist es sehr praktisch, Fehler direkt auf dem Bildschirm zu haben, für die die Anzeige von Fehlern eingeschaltet werden muss:

    error_reporting(E_ALL);
    ini_set('display_errors',1);
    
  • während eines Live Website müssen alle Fehler protokolliert, aber nie angezeigt werden an den Client. Konfigurieren Sie dazu PHP folgendermaßen:

    error_reporting(E_ALL);
    ini_set('display_errors', 0);
    ini_set('log_errors', 1);
    

Beachten Sie, dass error_reporting sollte auf E_ALL gesetzt werden die ganze Zeit.

Beachten Sie auch, dass trotz des verbreiteten Irrglaubens kein Try-Catch für die Fehlerberichterstattung verwendet werden muss . PHP wird Ihnen bereits PDO-Fehler melden, und zwar in einer viel besseren Form. Eine nicht abgefangene Ausnahme ist sehr gut für die Entwicklung, aber wenn Sie eine angepasste Fehlerseite anzeigen möchten, verwenden Sie trotzdem nicht try catch dafür, sondern setzen Sie einfach einen benutzerdefinierter Fehlerhandler . Kurz gesagt, Sie müssen PDO-Fehler nicht als etwas Besonderes behandeln, sondern als jeden anderen Fehler in Ihrem Code betrachten.

P.S.
Manchmal gibt es keinen Fehler, aber auch keine Ergebnisse. Dann bedeutet es, es gibt keine Daten, die Ihren Kriterien entsprechen . Diese Tatsache muss man also zugeben, auch wenn man beschwören kann, dass die Daten und Kriterien in Ordnung sind. Sie sind nicht. Sie müssen sie noch einmal überprüfen. Ich habe eine kurze Antwort, die Ihnen helfen würde, das Übereinstimmungsproblem zu lokalisieren, Problem mit übereinstimmenden Zeilen in der Datenbank mit PDO . Folgen Sie einfach dieser Anleitung und dem verlinkten Tutorial Schritt für Schritt und entweder haben Sie Ihr Problem gelöst oder Sie haben eine beantwortbare Frage für Stack Overflow.