PDO 全稱 PHP Data Objectphp
------------------ 錯誤處理 -------------------------mysql
php 的 mysql 擴展對於 mysql 執行中的錯誤,並不報錯顯示在頁面上。默認是「靜默模式」。若是要顯示錯誤到頁面上,須要使用函數 mysql_error()sql
if( !mysql_query("select * from ") ){數組
echo mysql_error();函數
}測試
PDO 類對錯誤的處理默認也是「靜默模式」。要輸出錯誤信息,也須要手動輸出。編碼
$pdo->errorCode() //得到錯誤的編碼對象
$pdo->errorInfo() //錯誤信息集合,包含三個元素的索引數組索引
PDO 支持三種錯誤處理模式:pdo
靜默模式,警告模式,異常模式
靜默模式是默認的,須要修改的話,經過設置 PDO 對象的屬性完成。
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT)
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING)
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT)
警告模式:
警告模式也不是什麼特別的東西哦,錯誤發生時會報一個警告,就只是一個警告,默認狀況下,php對警告的處理是輸出頁面,能夠本身定義處理函數。
異常模式:
異常處理分紅三步:拋出異常,監聽異常,捕獲異常。
其實異常就是錯誤。拋出的錯誤就是異常。錯誤處理是:觸發,處理。這裏的的觸發就是異常處理的「拋出」。
拋出:throw
監聽:try
捕獲:catch
異常的工做原理是這樣的,把一些信息放到一個類的對象裏面,這就是異常處理的原理。這個類叫異常類。這些信息叫異常信息。這沒有什麼特別的。這個異常類是 Exception .
通常的異常處理:
try{
$age = 28;
if( $age > 26 ){
throw new Exception("年齡過大");
}
}catch( Exception $e ){
echo $e->getMessage();
}
throw 會拋出一個異常對象,這個對象是異常類的對象,因此寫爲 new Exception 。
try 會監聽寫在它裏面的異常。catch 會捕獲它的參數對應的異常。這裏 catch 的參數是 Exception $e ,這種寫法表示這個參數是一個對象,並且只能是 Exception 類的對象。這是 php 語法裏面對參數的限制。這個異常類能夠是 Exception 或者 它的子類。若是是它的子類,那麼 throw new 的類也應該是 Exception 類的子類(我是這麼想的,未測試)。
PDO 的異常處理:
try{
$pdo->query("set names "); //不須要拋出異常,多是在query函數中拋出的
echo '錯誤了'; //這句不會輸出,拋出異常後程序掛起,必須處理異常,處理異常後這句也不執行。
}catch( PDOException $e ){ //PDOException類是 Exception類的子類的子類
echo $e->getMessage();
}
其實,異常處理就是用面向對象的語法來處理錯誤。用通常的面向過程的方法也是能夠,只是面向對象的語法比較高級。因此,錯誤處理方式分紅兩種:標準錯誤處理,異常錯誤處理。