異常處理:mysql
PHP:默認爲直接報錯sql
MYSQL:默認爲靜默模式,錯就錯,不報錯fetch
PDO:默認爲靜默模式,錯就錯,不報錯spa
之前,當PHP碰到錯誤的時候,會直接報錯,錯誤處理會變得至關麻煩。後來,當錯誤發生以後,會將錯誤信息再也不直接輸出,放到一個類的對象裏(PDOException)code
要使用PDO異常處理,必須知足兩個條件對象
一、須要將錯誤處理模式變成異常模式blog
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);pdo
二、全部可能出錯的語句都必須放到錯誤捕捉語句塊裏get
try{it
//錯誤捕捉語句塊
//凡有可能出現錯誤的語句都放在這
//一旦出錯會當即進入catch語句,把全部的錯誤信息放到PDOexception $e裏面
}catch(PDOExecption $e){
//將錯誤信息進行處理
}
例如:
try{ //鏈接認證 $pdo = new PDO('mysql:host=localhost;dbname=project','root','root'); //設置錯誤處理模式 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //組織SQL $sql= "update pro_student set s_age = 123 where s_id = 20"; $res = $pdo->exec($sql); }catch(PDOException $e){ //var_dump($e); //告訴用戶在哪一個文件的哪一行出現了什麼樣的錯誤 echo '出現異常:<br/>'; echo '錯誤出現的位置:' . $e->getFile() . $e->getLine() . '<br/>'; echo '錯誤緣由:' . $e->getMessage(); var_dump($e->getTrace());//獲取完整的錯誤數據 exit; }
有的時候,若是數據執行沒有任何錯誤,可是就是不符合指定的業務邏輯。一旦出現業務邏輯錯誤,異常是沒有辦法捕捉(異常只捕捉語法錯誤),通常認爲的去經過判斷語句的執行(結果),主動拋出異常,從而結束錯誤程序的運行。
語法:throw new PDOException;
$sql = "select * from pro_student where s_id = 20"; $stmt = $pdo->query($sql); if($stmt->fetchColumn(4) > 100) throw new PDOException; //拋出異常,立馬跳轉到catch語句塊 else{ echo '沒有問題'; }