PHP中PDO如何進(jìn)行錯誤處理

這篇文章給大家分享的是有關(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é)果:

PHP中PDO如何進(jìn)行錯誤處理

上述結(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é)果:

PHP中PDO如何進(jìn)行錯誤處理

其中我們需要注意的是: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)

外貿(mào)網(wǎng)站制作