PDO::ERRMODE_SILENT
Dies ist der Standardmodus. PDO legt einfach den Fehlercode fest, der mit den Methoden PDO::errorCode() und PDO::errorInfo() für Anweisungen und Datenbankobjekte überprüft werden kann. Wenn der Fehler aufgrund eines Aufrufs eines Anweisungsobjekts auftritt, können Sie die Methode PDOStatement::errorCode() oder PDOStatement::errorInfo() dieses Objekts aufrufen. Wenn der Fehler durch den Aufruf eines Datenbankobjekts verursacht wird, können die beiden oben genannten Methoden für das Datenbankobjekt aufgerufen werden.
PDO::ERRMODE_WARNING
Zusätzlich zum Festlegen des Fehlercodes sendet PDO auch eine herkömmliche E_WARNING-Nachricht. Diese Einstellung ist beim Debuggen/Testen nützlich, wenn Sie einfach nur sehen möchten, was falsch läuft, ohne den Fluss Ihrer Anwendung zu unterbrechen.
PDO::ERRMODE_EXCEPTION
Zusätzlich zum Festlegen des Fehlercodes löst PDO auch eine PDOException-Ausnahmeklasse aus und legt deren Eigenschaften so fest, dass sie den Fehlercode und die Fehlerinformationen widerspiegeln. Diese Einstellung ist auch beim Debuggen sehr nützlich, da sie effektiv auf die Stelle im Skript eingeht, an der der Fehler aufgetreten ist, sodass Sie potenziell problematische Bereiche im Code sehr schnell lokalisieren können (denken Sie daran: Wenn eine Ausnahme dazu führt, dass das Skript beendet wird, wird die Transaktion wird automatisch zurückgesetzt (Rollback).
Ein weiterer sehr nützlicher Vorteil des Ausnahmemodus besteht darin, dass Sie Ihre eigene Fehlerbehandlung klarer erstellen können als bei herkömmlichen Warnungen im PHP-Stil. Außerdem ist weniger Code erforderlich als im Silent-Modus und die explizite Überprüfung des Rückgabewerts jedes verschachtelten Datenbankaufrufs.
<?php$dsn = 'mysql:dbname=testdb;host=127.0.0.1';$user = 'dbuser';$password = 'dbpass';try { $dbh = new PDO($dsn, $user, $password ); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);} Catch (PDOException $e) { echo 'Verbindung fehlgeschlagen: ' $e->getMessage();}?>
Hinweis: Unabhängig davon, ob PDO::ATTR_ERRMODE derzeit festgelegt ist, löst PDO::__construct() immer eine PDOException aus, wenn die Verbindung fehlschlägt. Nicht abgefangene Ausnahmen sind fatal.
<?php$dsn = 'mysql:dbname=test;host=127.0.0.1';$user = 'googleguy';$password = 'googleguy';/* Die Verwendung von try/catch rund um den Konstruktor funktioniert auch dann noch, wenn ERRMODE gesetzt ist WARNUNG, da PDO::__construct immer eine PDOException auslöst, wenn die Verbindung fehlschlägt. */try { $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));} Catch (PDOException $e) { echo 'Verbindung fehlgeschlagen: ' $ e->getMessage(); exit;}//Dies führt dazu, dass PDO eine E_WARNING auslöst Fehler auf Ebene und keine Ausnahme (wenn die Datentabelle nicht vorhanden ist) $dbh->query("SELECT falsecolumn FROM failedtable");?>
Die obige Routine gibt Folgendes aus:
Warnung: PDO::query(): SQLSTATE[42S02]: Basistabelle oder -ansicht nicht gefunden: 1146 Tabelle „test.wrongtable“ existiert nicht in/tmp/pdo_test.php in Zeile 18. Fügen Sie eine Notiz hinzu. Fügen Sie eine Notiz hinzu