首頁 >後端開發 >PHP問題 >PHP資料庫學習之PDO怎麼進行錯誤處理?

PHP資料庫學習之PDO怎麼進行錯誤處理?

WBOY
WBOY原創
2021-10-28 16:54:022243瀏覽

在先前的文章中為大家帶來了《PHP資料庫學習之怎樣使用PDO來取得查詢結果? 》,其中詳細的介紹了怎樣使用PDO獲取查詢結果的相關知識,本篇我們一起來看一下PHP中怎樣進行PDO的錯誤處理,希望對大家有幫助!

PHP資料庫學習之PDO怎麼進行錯誤處理?

在之前的學習中我們已經學會出來了透過PDO獲取查詢結果,那接下來就要學習一下PDO的錯誤處理, 在PDO 中有兩個獲取程式中錯誤訊息的方法,分別是errorCode() 方法和errorInfo() 方法。接下來我們就一起來看看這兩種方法的應用吧。

在了解errorCode() 方法和 errorInfo() 方法是怎麼進行錯誤處理的方法之前,我們先來看看PDO中的錯誤處理模式。

PDO的錯誤處理模式

#在PDO 中總共提供了三種不同的錯誤處理模式,它們不僅可以滿足不同風格的編程,也可以調整擴充處理錯誤的方式。那接下來就來跟大家介紹這三種不同的錯誤處理方式。

  • <span style="font-size: 16px;"><strong>PDO::ERRMODE_SILENT</strong></span><span style="font-size: 16px;"><strong> </strong></span>

PDO::ERRMODE_SILENT 表示的為預設模式,在這種情況下發生錯誤的時候,PDO會簡單的設定錯誤碼,不會做其他的任何操作,同時也可以使用PDO::errorCode() PDO::errorInfo() 這兩個方法來檢查語句和檢查資料庫物件。

我們要注意的是,如果錯誤出現的原因是因為呼叫語句對象,那麼可以呼叫這個物件的PDOStatement::errorCode() 或 PDOStatement::errorInfo() 方法。如果錯誤出現的原因是因為呼叫資料庫物件而產生的,那麼可以在資料庫物件上呼叫PDOStatement::errorCode() 或 PDOStatement::errorInfo() 這兩種方法。

  • <span style="font-size: 16px;"><strong>PDO::ERRMODE_WARNING </strong></span><span style="font-size: 16px;"></span>

PDO::ERRMODE_WARNING 模式可以設定錯誤代碼,當然了它除了會設定錯誤碼之外,PDO還會發出一條訊息,這條訊息是很傳統的E_WARNING 訊息。在我們需要調試或測試的時候,不想中斷程式但是想弄清楚發生了什麼問題的時候。 PDO::ERRMODE_WARNING 這個模式就到了發揮作用的時候了

  • <span style="font-size: 16px;"><strong>PDO::ERRMODE_EXCEPTION </strong></span>

#PDO::ERRMODE_EXCEPTION 模式也可以設定錯誤碼,初步觀看能夠設定錯誤碼之外,PDO還能夠拋出一個 PDOException 異常類別並設定它的屬性來反射錯誤碼和錯誤訊息。 PDO::ERRMODE_EXCEPTION 模式在偵錯的時候也是非常有用的,它可以非常快速地指出程式碼中有問題的潛在區域,因為它會有效地放大腳本中產生錯誤的點。

PDO 使用 SQL-92 SQLSTATE 來規範錯誤碼字串,不同 PDO 驅動程式負責將它們的本機程式碼對應為適當的 SQLSTATE 程式碼。 PDO::errorCode() 方法傳回一個單獨的 SQLSTATE 碼。

如果需要更多這個錯誤的細節信息,PDO 還提供了一個 PDO::errorInfo() 方法來傳回一個包含SQLSTATE 程式碼、特定驅動錯誤碼以及此驅動程式的錯誤字串的數組。

異常模式另一個非常有用的作用是,相比傳統PHP 風格的警告,可以更清晰地建立自己的錯誤處理,而且比起靜默模式和明確地檢查每種資料庫調用的返回值,異常模式需要的程式碼/嵌套更少。

接下來我們透過範例來看看建立 PDO 實例,並設定錯誤模式。範例如下:

<?php
    $dsn  = &#39;mysql:dbname=test;host=127.0.0.1&#39;;
    $user = &#39;root&#39;;
    $pwd  = &#39;root&#39;;
    try {
        $pdo = new PDO($dsn, $user, $pwd);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        echo &#39;Connection failed: &#39; . $e->getMessage();
    }
?>

上述範例中便是透過PDO::setAttribute() 方法設定錯誤模式,除了此方法設定錯誤模式外,還可以在建立PDO 實例時設定錯誤模式

範例如下:

$pdo = new PDO($dsn, $user, $pwd, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));

以上便是便是PDO的三種錯誤處理模式,接下來我們來看看PDO::errorCode() 方法。

<strong><span style="font-size: 20px;">PDO::errorCode()</span></strong>


################## ##PDO::errorCode()### 方法大多是用在取得操作資料庫句柄時所發生的錯誤代碼,這些錯誤代碼稱為SQLSTATE 程式碼。 ######

PDO::errorCode() 方法可以返回一个 SQLSTATE,一个由 5 个字母或数字组成的在 ANSI SQL 标准中定义的标识符。 简单可以理解成,一个 SQLSTATE 由前面两个字符的类值和后面三个字符的子类值组成。

接下来我们通过示例来看一下通过 PDO 连接数据库,并通过 errorCode() 方法获取错误代码。

示例如下:

<?php
    $dsn  = &#39;mysql:dbname=test;host=127.0.0.1&#39;;
    $user = &#39;root&#39;;
    $pwd  = &#39;root&#39;;
    try {
        $pdo = new PDO($dsn, $user, $pwd);
        $sql = &#39;select * from user&#39;;
        $res = $pdo -> query($sql);
        echo &#39;errorCode 为:&#39;.$pdo -> errorCode().&#39;<br>&#39;;
        foreach ($res as $key => $value) {
            echo &#39;序号:&#39;.$value[&#39;id&#39;].&#39;; 姓名:&#39;.$value[&#39;name&#39;].&#39;; 年龄:&#39;.$value[&#39;age&#39;].&#39;; 性别:&#39;.$value[&#39;sex&#39;].&#39;<br>&#39;;
        }
    } catch (PDOException $e) {
        echo &#39;Connection failed: &#39; . $e->getMessage();
    }
?>

输出结果:

PHP資料庫學習之PDO怎麼進行錯誤處理?

上述结果便是通过 errorCode() 方法获取错误代码。接下来我们看一下最后一种方法PDO::errorInfo() 方法。

<strong><span style="font-size: 20px;">PDO::errorInfo() </span></strong>方法

PDO::errorInfo() 方法与PDO::errorCode() 方法一样都是用于获取操作数据库句柄时所发生的错误信息。

不同的是errorInfo() 方法的返回值为一个数组,它包含了相关的错误信息。

接下来我们通过示例来看一下使用 PDO 中的 query 方法完成数据查询操作,并通过 errorInfo() 方法获取错误信息。

示例如下:

<?php
    $dsn  = &#39;mysql:dbname=test;host=127.0.0.1&#39;;
    $user = &#39;root&#39;;
    $pwd  = &#39;root&#39;;
    try {
        $pdo = new PDO($dsn, $user, $pwd);
        // $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = &#39;select * from userr&#39;;
        $res = $pdo -> query($sql);
        echo &#39;errorInfo 为:<br>&#39;;
        print_r($pdo -> errorInfo());
    } catch (PDOException $e) {
        echo &#39;Connection failed: &#39; . $e->getMessage();
    }
?>

上述示例中,我们查询了一个不存在的数据库,输出结果:

PHP資料庫學習之PDO怎麼進行錯誤處理?

其中我们需要注意的是:PDO 和 PDOStatement 对象中都有 errorCode() 和 errorInfo() 方法,如果没有任何错误,errorCode() 返回的是 00000;否则就会返回一些错误代码。而 errorInfo() 返回的是一个数组,包括 PHP 定义的错误代码和 MySQL 的错误代码及错误信息。

大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。

以上是PHP資料庫學習之PDO怎麼進行錯誤處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn