php實現(xiàn)的PDO異常處理操作分析
本文實例講述了php實現(xiàn)的PDO異常處理操作。分享給大家供大家參考,具體如下:
異常處理:
PHP:默認(rèn)為直接報錯
MYSQL:默認(rèn)為靜默模式,錯就錯,不報錯
PDO:默認(rèn)為靜默模式,錯就錯,不報錯
以前,當(dāng)PHP碰到錯誤的時候,會直接報錯,錯誤處理會變得相當(dāng)麻煩。后來,當(dāng)錯誤發(fā)生之后,會將錯誤信息不再直接輸出,放到一個類的對象里(PDOException)
要使用PDO異常處理,必須滿足兩個條件
1、需要將錯誤處理模式變成異常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
2、所有可能出錯的語句都必須放到錯誤捕捉語句塊里
try{
//錯誤捕捉語句塊
//凡是有可能出現(xiàn)錯誤的語句都放在這
//一旦出錯會立即進(jìn)入catch語句,把所有的錯誤信息放到PDOexception $e里面
}catch(PDOExecption $e){
//將錯誤信息進(jìn)行處理
}
例如:
try{
//連接認(rèn)證
$pdo = new PDO('mysql:host=localhost;dbname=project','root','root');
//設(shè)置錯誤處理模式
$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);
//告訴用戶在哪個文件的哪一行出現(xiàn)了什么樣的錯誤
echo '出現(xiàn)異常:<br/>';
echo '錯誤出現(xiàn)的位置:' . $e->getFile() . $e->getLine() . '<br/>';
echo '錯誤原因:' . $e->getMessage();
var_dump($e->getTrace());//獲取完整的錯誤數(shù)據(jù)
exit;
}
有的時候,如果數(shù)據(jù)執(zhí)行沒有任何錯誤,但是就是不符合指定的業(yè)務(wù)邏輯。一旦出現(xiàn)業(yè)務(wù)邏輯錯誤,異常是沒有辦法捕捉(異常只捕捉語法錯誤),一般認(rèn)為的去通過判斷語句的執(zhí)行(結(jié)果),主動拋出異常,從而結(jié)束錯誤程序的運行。
語法:throw new PDOException;
$sql = "select * from pro_student where s_id = 20";
$stmt = $pdo->query($sql);
if($stmt->fetchColumn(4) > 100) throw new PDOException; //拋出異常,立馬跳轉(zhuǎn)到catch語句塊
else{
echo '沒有問題';
}
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP基于pdo操作數(shù)據(jù)庫技巧總結(jié)》、《php+Oracle數(shù)據(jù)庫程序設(shè)計技巧總結(jié)》、《PHP+MongoDB數(shù)據(jù)庫操作技巧大全》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
相關(guān)文章
PHP+Redis開發(fā)的書簽案例實戰(zhàn)詳解
這篇文章主要介紹了PHP+Redis開發(fā)的書簽案例,結(jié)合實例形式詳細(xì)分析了php結(jié)合redis開發(fā)書簽功能的具體步驟及相關(guān)操作技巧,需要的朋友可以參考下2019-07-07
淺析PHP原理之變量分離/引用(Variables Separation)
以下小編就為大家介紹一下PHP中變量分離和引用的概念。需要的朋友可以過來參考下2013-08-08
PHP+AJAX實現(xiàn)無刷新注冊(帶用戶名實時檢測)
PHP+AJAX實現(xiàn)無刷新注冊(帶用戶名實時檢測)...2006-12-12
PHP下編碼轉(zhuǎn)換函數(shù)mb_convert_encoding與iconv的使用說明
mb_convert_encoding這個函數(shù)是用來轉(zhuǎn)換編碼的。原來一直對程序編碼這一概念不理解,不過現(xiàn)在好像有點開竅了。2009-12-12

