溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時間:2021-10-28 17:01:30 來源:億速云 閱讀:151 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關(guān)PHP中PDO如何進(jìn)行錯誤處理的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

在之前的學(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)整擴(kuò)展處理錯誤的方式。那接下來就給大家介紹一下這三種不同的錯誤處理方式。

  • 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)試的時候也是非常有用的,它可以非??焖俚刂赋龃a中有問題的潛在區(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é)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI