PHP PDO Fehler mit der Fehlerbehandlung
- PDO :: ERRMODE_SILENT
Dies ist der Standardmodus. PDO wird einfach den Fehlercode gesetzt ist, verwenden Sie das PDO :: errorcode () und PDO :: errorinfo () die Anweisung und Datenbankobjekte zu überprüfen. Wenn der Fehler zurückzuführen ist auf das Objekt der Anweisung Aufruf erzeugt wird, dann können Sie das Objekt PDOStatement nennen :: errorcode () oder PDOStatement :: errorinfo () -Methode. Wenn der Fehler aus einem Aufruf des Datenbank-Objekts hervorging, dann diese Methoden des Datenbank-Objekt aufrufen.
- PDO :: ERRMODE_WARNING
Neben den Fehlercode zusätzlich zur Einstellung, PDO wird eine traditionelle E_WARNING-Meldung abgeben. Wenn Sie wollen einfach nur sehen, welche Probleme aufgetreten den Ablauf der Anwendung ohne Unterbrechung, so dass diese Einstellung bei der Fehlersuche / Testphase ist sehr nützlich.
- PDO :: ERRMODE_EXCEPTION
Neben den Fehlercode zusätzlich zur Einstellung, PDO wird eine Ausnahme PDOException Klasse werfen und legen Sie die Eigenschaften der Fehlercode und Fehlermeldungen zu reflektieren. Diese Einstellung ist auch nützlich bei der Fehlersuche, weil eine falsche Stelle ist es effektiv das Skript vergrößern wird, die sich sehr schnell heraus Code Potential Problembereich zeigen kann (zur Erinnerung: wenn die Ausnahme das Skript bewirkt, dass die Transaktion zu beenden wird automatisch zurück roll).
Eine weitere Ausnahme-Modus ist sehr nützlich, im Vergleich zu herkömmlichen PHP-Stil Warnungen, können Sie Ihre eigenen Fehler bauen deutlicher Handhabung und der Rückgabewert der einzelnen Datenbank-Aufruf, abnormale Muster-Code erforderlich im Vergleich zu Silent-Modus und explizit überprüft / nisten weniger.
Erstellen Sie eine PDO-Instanz und setzen Fehlermodus
<?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 'Connection failed: ' . $e->getMessage(); } ?>
Hinweis: Unabhängig davon , ob der aktuelle Satz PDO :: ATTR_ERRMODE, wenn die Verbindung fehlschlägt, PDO :: __ construct () wird immer eine PDOException Ausnahme werfen. Abgefangene Ausnahme ist fatal.
Erstellen Sie eine PDO-Instanz und setzen Fehlermodus im Konstruktor
<?php $dsn = 'mysql:dbname=test;host=127.0.0.1'; $user = 'googleguy'; $password = 'googleguy'; /* 使用 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 'Connection failed: ' . $e->getMessage(); exit; } // 这里将导致 PDO 抛出一个 E_WARNING 级别的错误,而不是 一个异常 (当数据表不存在时) $dbh->query("SELECT wrongcolumn FROM wrongtable"); ?>
Das oben gezeigte Beispiel Ausgabe:
Warning: PDO::query(): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.wrongtable' doesn't exist in /tmp/pdo_test.php on line 18 add a note add a note