php實(shí)現(xiàn)的PDO異常處理操作分析
本文實(shí)例講述了php實(shí)現(xiàn)的PDO異常處理操作。分享給大家供大家參考,具體如下:
異常處理:
PHP:默認(rèn)為直接報(bào)錯(cuò)
MYSQL:默認(rèn)為靜默模式,錯(cuò)就錯(cuò),不報(bào)錯(cuò)
PDO:默認(rèn)為靜默模式,錯(cuò)就錯(cuò),不報(bào)錯(cuò)
以前,當(dāng)PHP碰到錯(cuò)誤的時(shí)候,會(huì)直接報(bào)錯(cuò),錯(cuò)誤處理會(huì)變得相當(dāng)麻煩。后來(lái),當(dāng)錯(cuò)誤發(fā)生之后,會(huì)將錯(cuò)誤信息不再直接輸出,放到一個(gè)類(lèi)的對(duì)象里(PDOException)
要使用PDO異常處理,必須滿足兩個(gè)條件
1、需要將錯(cuò)誤處理模式變成異常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
2、所有可能出錯(cuò)的語(yǔ)句都必須放到錯(cuò)誤捕捉語(yǔ)句塊里
try{ //錯(cuò)誤捕捉語(yǔ)句塊 //凡是有可能出現(xiàn)錯(cuò)誤的語(yǔ)句都放在這 //一旦出錯(cuò)會(huì)立即進(jìn)入catch語(yǔ)句,把所有的錯(cuò)誤信息放到PDOexception $e里面 }catch(PDOExecption $e){ //將錯(cuò)誤信息進(jìn)行處理 }
例如:
try{ //連接認(rèn)證 $pdo = new PDO('mysql:host=localhost;dbname=project','root','root'); //設(shè)置錯(cuò)誤處理模式 $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); //告訴用戶(hù)在哪個(gè)文件的哪一行出現(xiàn)了什么樣的錯(cuò)誤 echo '出現(xiàn)異常:<br/>'; echo '錯(cuò)誤出現(xiàn)的位置:' . $e->getFile() . $e->getLine() . '<br/>'; echo '錯(cuò)誤原因:' . $e->getMessage(); var_dump($e->getTrace());//獲取完整的錯(cuò)誤數(shù)據(jù) exit; }
有的時(shí)候,如果數(shù)據(jù)執(zhí)行沒(méi)有任何錯(cuò)誤,但是就是不符合指定的業(yè)務(wù)邏輯。一旦出現(xiàn)業(yè)務(wù)邏輯錯(cuò)誤,異常是沒(méi)有辦法捕捉(異常只捕捉語(yǔ)法錯(cuò)誤),一般認(rèn)為的去通過(guò)判斷語(yǔ)句的執(zhí)行(結(jié)果),主動(dòng)拋出異常,從而結(jié)束錯(cuò)誤程序的運(yùn)行。
語(yǔ)法: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語(yǔ)句塊 else{ echo '沒(méi)有問(wèn)題'; }
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《PHP基于pdo操作數(shù)據(jù)庫(kù)技巧總結(jié)》、《php+Oracle數(shù)據(jù)庫(kù)程序設(shè)計(jì)技巧總結(jié)》、《PHP+MongoDB數(shù)據(jù)庫(kù)操作技巧大全》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門(mén)教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
php實(shí)現(xiàn)過(guò)濾字符串中的中文和數(shù)字實(shí)例
這篇文章主要介紹了php實(shí)現(xiàn)過(guò)濾字符串中的中文和數(shù)字的方法,實(shí)例分析了php操作中文和數(shù)字匹配的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07php站內(nèi)搜索并高亮顯示關(guān)鍵字的實(shí)現(xiàn)代碼
將sql語(yǔ)句中包含的%$info%交給DBMS執(zhí)行的時(shí)候,他會(huì)查找字段中含有變量$info的值的信息2011-12-12Nginx+ThinkPHP+Vue解決跨域問(wèn)題的方法詳解
這篇文章主要為大家詳細(xì)介紹了Nginx+ThinkPHP+Vue解決跨域問(wèn)題的方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下2024-04-04PHP下載采集圖片到本地的方法詳解【可忽略ssl認(rèn)證】
這篇文章主要介紹了PHP下載采集圖片到本地的方法,結(jié)合實(shí)例形式詳細(xì)分析了php基于Curl遠(yuǎn)程獲取遠(yuǎn)程圖片資源到本地的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2023-07-07php及codeigniter使用session-cookie的方法(詳解)
下面小編就為大家?guī)?lái)一篇php及codeigniter使用session-cookie的方法(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04PHP中使用循環(huán)實(shí)現(xiàn)的金字塔圖形
這篇文章主要介紹了PHP中使用循環(huán)實(shí)現(xiàn)的金字塔圖形,本文是一篇PHP的課堂筆記,完成老師的作業(yè)總結(jié)而來(lái),需要的朋友可以參考下2014-11-11