這篇文章給大家分享的是有關(guān)PHP中PDO如何進(jìn)行錯誤處理的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
十多年的云安網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。網(wǎng)絡(luò)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整云安建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)從事“云安網(wǎng)站設(shè)計”,“云安網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
在之前的學(xué)習(xí)中我們已經(jīng)學(xué)會出來了通過PDO獲取查詢結(jié)果,那接下來就要學(xué)習(xí)一下PDO的錯誤處理, 在 PDO 中有兩個獲取程序中錯誤信息的方法,分別是 errorCode()
方法和 errorInfo()
方法。接下來我們就一起來看一看這兩種方法的應(yīng)用吧。
在了解errorCode() 方法和 errorInfo() 方法是怎樣進(jìn)行錯誤處理的方法之前,我們先來看一下PDO中的錯誤處理模式。
PDO的錯誤處理模式
在PDO 中一共提供了三種不同的錯誤處理模式,它們不僅可以滿足不同風(fēng)格的編程,也可以調(diào)整擴展處理錯誤的方式。那接下來就給大家介紹一下這三種不同的錯誤處理方式。
PDO::ERRMODE_SILENT
PDO::ERRMODE_SILENT
表示的為默認(rèn)模式,在這種情況下發(fā)生錯誤的時候 ,PDO會簡單的設(shè)置一下錯誤碼,不會做其他的任何操作,同時也可以使用PDO::errorCode()
和 PDO::errorInfo()
這兩個方法來檢查語句和檢查數(shù)據(jù)庫對象。
我們需要注意的是,如果錯誤出現(xiàn)的原因是因為調(diào)用語句對象,那么可以調(diào)用這個對象的PDOStatement::errorCode() 或 PDOStatement::errorInfo() 方法。如果錯誤出現(xiàn)的原因是因為調(diào)用數(shù)據(jù)庫對象而產(chǎn)生的,那么可以在數(shù)據(jù)庫對象上調(diào)用PDOStatement::errorCode() 或 PDOStatement::errorInfo() 這兩種方法。
PDO::ERRMODE_WARNING
PDO::ERRMODE_WARNING 模式可以設(shè)置錯誤代碼,當(dāng)然了它除了會設(shè)置錯誤碼之外,PDO還會發(fā)出一條信息,這條信息是很傳統(tǒng)的E_WARNING 信息。在我們需要調(diào)試或者測試的時候,不想中斷程序但是想弄清楚發(fā)生了什么問題的時候。PDO::ERRMODE_WARNING 這個模式就到了發(fā)揮作用的時候了
PDO::ERRMODE_EXCEPTION
PDO::ERRMODE_EXCEPTION 模式也可以設(shè)置錯誤碼,初看能夠設(shè)置錯誤碼之外,PDO還能夠拋出一個 PDOException 異常類并設(shè)置它的屬性來反射錯誤碼和錯誤信息。PDO::ERRMODE_EXCEPTION 模式在調(diào)試的時候也是非常有用的,它可以非常快速地指出代碼中有問題的潛在區(qū)域,因為它會有效地放大腳本中產(chǎn)生錯誤的點。
PDO 使用 SQL-92 SQLSTATE
來規(guī)范錯誤碼字符串,不同 PDO 驅(qū)動程序負(fù)責(zé)將它們的本地代碼映射為適當(dāng)?shù)?SQLSTATE 代碼。PDO::errorCode()
方法返回一個單獨的 SQLSTATE
碼。
如果需要更多這個錯誤的細(xì)節(jié)信息,PDO 還提供了一個 PDO::errorInfo()
方法來返回一個包含 SQLSTATE 碼、特定驅(qū)動錯誤碼以及此驅(qū)動的錯誤字符串的數(shù)組。
異常模式另一個非常有用的作用是,相比傳統(tǒng) PHP 風(fēng)格的警告,可以更清晰地構(gòu)建自己的錯誤處理,而且比起靜默模式和顯式地檢查每種數(shù)據(jù)庫調(diào)用的返回值,異常模式需要的代碼/嵌套更少。
接下來我們通過示例來看一下創(chuàng)建 PDO 實例,并設(shè)置錯誤模式。示例如下:
<?php $dsn = 'MySQL:dbname=test;host=127.0.0.1'; $user = 'root'; $pwd = 'root'; try { $pdo = new PDO($dsn, $user, $pwd); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } ?>
上述示例中便是通過PDO::setAttribute()
方法設(shè)置錯誤模式,除了這種方法設(shè)置錯誤模式外,還可以在創(chuàng)建PDO 實例時設(shè)置錯誤模式
示例如下:
$pdo = new PDO($dsn, $user, $pwd, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
以上便是便是PDO的三種錯誤處理模式,接下來我們看一下PDO::errorCode() 方法。
PDO::errorCode()
方法
PDO::errorCode()
方法大多是用在獲取在操作數(shù)據(jù)庫句柄時所發(fā)生的錯誤代碼,這些錯誤代碼被稱為SQLSTATE 代碼。
PDO::errorCode() 方法可以返回一個 SQLSTATE,一個由 5 個字母或數(shù)字組成的在 ANSI SQL
標(biāo)準(zhǔn)中定義的標(biāo)識符。 簡單可以理解成,一個 SQLSTATE 由前面兩個字符的類值和后面三個字符的子類值組成。
接下來我們通過示例來看一下通過 PDO 連接數(shù)據(jù)庫,并通過 errorCode() 方法獲取錯誤代碼。
示例如下:
<?php $dsn = 'mysql:dbname=test;host=127.0.0.1'; $user = 'root'; $pwd = 'root'; try { $pdo = new PDO($dsn, $user, $pwd); $sql = 'select * from user'; $res = $pdo -> query($sql); echo 'errorCode 為:'.$pdo -> errorCode().'<br>'; foreach ($res as $key => $value) { echo '序號:'.$value['id'].'; 姓名:'.$value['name'].'; 年齡:'.$value['age'].'; 性別:'.$value['sex'].'<br>'; } } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } ?>
輸出結(jié)果:
上述結(jié)果便是通過 errorCode() 方法獲取錯誤代碼。接下來我們看一下最后一種方法PDO::errorInfo() 方法。
PDO::errorInfo()
方法
PDO::errorInfo()
方法與PDO::errorCode()
方法一樣都是用于獲取操作數(shù)據(jù)庫句柄時所發(fā)生的錯誤信息。
不同的是errorInfo() 方法的返回值為一個數(shù)組,它包含了相關(guān)的錯誤信息。
接下來我們通過示例來看一下使用 PDO 中的 query 方法完成數(shù)據(jù)查詢操作,并通過 errorInfo() 方法獲取錯誤信息。
示例如下:
<?php $dsn = 'mysql:dbname=test;host=127.0.0.1'; $user = 'root'; $pwd = 'root'; try { $pdo = new PDO($dsn, $user, $pwd); // $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = 'select * from userr'; $res = $pdo -> query($sql); echo 'errorInfo 為:<br>'; print_r($pdo -> errorInfo()); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } ?>
上述示例中,我們查詢了一個不存在的數(shù)據(jù)庫,輸出結(jié)果:
其中我們需要注意的是:PDO 和 PDOStatement 對象中都有 errorCode() 和 errorInfo() 方法,如果沒有任何錯誤,errorCode() 返回的是 00000;否則就會返回一些錯誤代碼。而 errorInfo() 返回的是一個數(shù)組,包括 PHP 定義的錯誤代碼和 MySQL 的錯誤代碼及錯誤信息。
感謝各位的閱讀!關(guān)于“PHP中PDO如何進(jìn)行錯誤處理”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
分享名稱:PHP中PDO如何進(jìn)行錯誤處理
當(dāng)前鏈接:http://muchs.cn/article46/pipghg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、靜態(tài)網(wǎng)站、網(wǎng)站排名、ChatGPT、小程序開發(fā)、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)