PDO 提供了三種不同的錯誤處理模式
1.PDO::ERRMODE_SILENT (PDO 將只簡單地設置錯誤碼)
2.PDO::ERRMODE_WARNING (PDO 還將發出一條傳統的 E_WARNING 信息)
3.PDO::ERRMODE_EXCEPTION (PDO 還將拋出一個 PDOException 異常類並設置它的屬性來反射錯誤碼和錯誤信息)
例1 創建 PDO 實例並設置錯誤模式
<?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();
}
例2 創建 PDO 實例並在構造函數中設置錯誤模式
<?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");
?>
以上例程會輸出:
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