Błąd PHP PDO z obsługi błędów
Podręcznik PHP PDO referencyjny
- PDO :: ERRMODE_SILENT
Jest to tryb domyślny. PDO będzie po prostu ustawić kod błędu, należy użyć metody PDO :: ErrorInfo () PDO :: ERRORCODE () i sprawdzić oświadczenia i obiektów bazy danych. Jeśli błąd jest spowodowany przedmiotem instrukcji wywołania jest generowany, to można nazwać, że PDOStatement obiektu :: ERRORCODE () lub metodę PDOStatement :: ErrorInfo (). Jeśli błąd jest wynikiem połączenia w obiekcie bazy danych, a następnie powoływać się na te metody na obiekcie bazy danych.
- PDO :: ERRMODE_WARNING
Oprócz ustawienia dodanie kodu błędu, PDO wyemituje tradycyjną wiadomość E_WARNING. Jeśli tylko chcesz zobaczyć jakie problemy wystąpiły bez przerywania przepływu aplikacji, więc to ustawienie w czasie debugowania / testowania jest bardzo przydatna.
- PDO :: ERRMODE_EXCEPTION
Oprócz ustawienia dodanie kodu błędu, PDO wygeneruje klasę PDOException wyjątku i ustawić jego właściwości, aby odzwierciedlić wiadomości Kod błędu i błędów. To ustawienie jest również przydatna podczas debugowania, ponieważ niewłaściwy punkt będzie skutecznie powiększyć skrypt, który można bardzo szybko wskazać potencjalne numer kierunkowy problemem (pamiętaj: jeśli Wyjątek wywołuje skrypt do zakończenia transakcji jest automatycznie z powrotem rolki).
Innym sposobem Wyjątkiem jest bardzo przydatna, w porównaniu do tradycyjnych ostrzeżeń PHP stylu, można zbudować swój własny błąd jaśniej postępowania, a wartość zwrotu każdego połączenia z bazą danych, nieprawidłowego kodu wzór wymagane w porównaniu do trybu cichego i jawnie sprawdzanie / gniazdowania mniej.
Tworzenie instancji PDO i ustawić tryb błędu
<?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(); } ?>
Uwaga: Niezależnie od tego, czy obecny zestaw PDO :: ATTR_ERRMODE, jeżeli połączenie nie powiedzie się, PDO :: __ construct () będzie zawsze rzucić wyjątek PDOException. Uncaught Wyjątkiem jest śmiertelne.
Tworzenie instancji PDO i ustawić tryb błędu w konstruktorze
<?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"); ?>
Powyższy wyjście przykładzie:
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