PHP--PDO-Fehler und Fehlerbehandlung

伊谢尔伦
Freigeben: 2016-11-22 09:32:17
Original
969 Leute haben es durchsucht

PDO bietet drei verschiedene Fehlerbehandlungsmodi, um verschiedenen Stilen der Anwendungsentwicklung gerecht zu werden:

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, kann die Methode PDOStatement::errorCode() oder PDOStatement::errorInfo() dieses Objekts aufgerufen werden. 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 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 (Rolle).

Eine weitere sehr nützliche Sache des Ausnahmemodus besteht darin, dass Sie Ihre eigene Fehlerbehandlung klarer erstellen können als herkömmliche Warnungen im PHP-Stil. Im Vergleich zum stillen Modus und der expliziten Überprüfung des Rückgabewerts jedes Datenbankaufrufs erfordern Ausnahmemuster weniger Code/Verschachtelung.

PDO verwendet SQL-92 SQLSTATE, um Fehlercodezeichenfolgen zu standardisieren; verschiedene PDO-Treiber sind für die Zuordnung ihrer nativen Codes zu den entsprechenden SQLSTATE-Codes verantwortlich. Die Methode PDO::errorCode() gibt einen einzelnen SQLSTATE-Code zurück. Wenn Sie detailliertere Informationen zu diesem Fehler benötigen, stellt PDO auch eine PDO::errorInfo()-Methode zur Verfügung, um ein Array zurückzugeben, das den SQLSTATE-Code, den spezifischen Treiberfehlercode und die Fehlerzeichenfolge dieses Treibers enthält.

Beispiel #1 Erstellen Sie eine PDO-Instanz und legen Sie den Fehlermodus fest

<?php
    $dsn = &#39;mysql:dbname=testdb;host=127.0.0.1&#39;;
    $user = &#39;dbuser&#39;;
    $password = &#39;dbpass&#39;;
    try {
        $dbh = new PDO($dsn, $user, $password);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        echo &#39;Connection failed: &#39; . $e->getMessage();
    }
?>
Nach dem Login kopieren

Unabhängig davon, ob PDO::ATTR_ERRMODE aktuell eingestellt ist, wird PDO::__construct() dies tun, wenn die Verbindung fehlschlägt löst immer eine PDOException-Ausnahme aus. Nicht abgefangene Ausnahmen sind fatal.

Beispiel #2 Erstellen Sie eine PDO-Instanz und legen Sie den Fehlermodus im Konstruktor fest

<?php
    $dsn = &#39;mysql:dbname=test;host=127.0.0.1&#39;;
    $user = &#39;googleguy&#39;;
    $password = &#39;googleguy&#39;;
    /*
     *使用 try/catch 围绕构造函数仍然有效,即使设置了 ERRMODE 为 WARNING,
     *因为如果连接失败,PDO::__construct 将总是抛出一个 PDOException 异常。
     */
    try {
        $dbh = new PDO($dsn, $user, $password, 
            array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
    } catch (PDOException $e) {
        echo &#39;Connection failed: &#39; . $e->getMessage();
        exit;
    }
// 这里将导致 PDO 抛出一个 E_WARNING 级别的错误,而不是 一个异常 (当数据表不存在时)
$dbh->query("SELECT wrongcolumn FROM wrongtable");
?>
Nach dem Login kopieren

Die obige Routine gibt Folgendes aus:

Warning: PDO::query(): SQLSTATE[42S02]: Base table or view not found: 1146 Table &#39;test.wrongtable&#39; doesn&#39;t exist in/tmp/pdo_test.php on line 18
Nach dem Login kopieren


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage