天天看點

PDO錯誤與錯誤處理

PDO錯誤處理的三種模式:

引用->

1.PDO::ERRMODE_SILENT

此為預設模式。 PDO 将隻簡單地設定錯誤碼,可使用 PDO::errorCode() 和 PDO::errorInfo() 方法來檢查語句和資料庫對象。如果錯誤是由于對語句對象的調用而産生的,那麼可以調用那個對象的 PDOStatement::errorCode() 或 PDOStatement::errorInfo() 方法。如果錯誤是由于調用資料庫對象而産生的,那麼可以在資料庫對象上調用上述兩個方法。

2.PDO::ERRMODE_WARNING

除設定錯誤碼之外,PDO 還将發出一條傳統的 E_WARNING 資訊。如果隻是想看看發生了什麼問題且不中斷應用程式的流程,那麼此設定在調試/測試期間非常有用。

3.PDO::ERRMODE_EXCEPTION

除設定錯誤碼之外,PDO 還将抛出一個 PDOException 異常類并設定它的屬性來反射錯誤碼和錯誤資訊。此設定在調試期間也非常有用,因為它會有效地放大腳本中産生錯誤的點,進而可以非常快速地指出代碼中有問題的潛在區域(記住:如果異常導緻腳本終止,則事務被自動復原)。

異常模式另一個非常有用的是,相比傳統 PHP 風格的警告,可以更清晰地建構自己的錯誤處理,而且比起靜默模式和顯式地檢查每種資料庫調用的傳回值,異常模式需要的代碼/嵌套更少。】

方式:

try {

    $dbh = new PDO($dsn, $user, $password, array(

    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,//錯誤處理

    ));

} catch (PDOException $e) {

    echo 'Connection failed: ' . $e->getMessage();

    exit;

}

或者

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//錯誤處理      

當模式為ERRMODE_SILENT時,如果出現異常程式并不會中斷,也不會抛出異常,但是可以通過以下方法檢查錯誤

$res=$dbh->query("SELECT wrongcolumn FROM wrongtable");//資料表‘wrongcolunm’不錯在      
if(FALSE === $res)
    throw new PDOException(var_export($this->_connection->errorInfo(), true));      

是不是很麻煩需要手動跑出異常。

如果設定成ERRMODE_WARNING

會導緻 PDO 抛出一個 E_WARNING 級别的錯誤,而不是 一個異常 ,程式并不會中斷

而第三種模式就可以用catch到異常啦,很友善。但需要及時捕獲,否則會是緻命的。