在先前的文章中為大家帶來了《PHP資料庫學習之怎樣使用PDO來取得查詢結果? 》,其中詳細的介紹了怎樣使用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 = '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()
方法設定錯誤模式,除了此方法設定錯誤模式外,還可以在建立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,一个由 5 个字母或数字组成的在 ANSI SQL
标准中定义的标识符。 简单可以理解成,一个 SQLSTATE 由前面两个字符的类值和后面三个字符的子类值组成。
接下来我们通过示例来看一下通过 PDO 连接数据库,并通过 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(); } ?>
输出结果:
上述结果便是通过 errorCode() 方法获取错误代码。接下来我们看一下最后一种方法PDO::errorInfo() 方法。
<strong><span style="max-width:90%">PDO::errorInfo() </span></strong>
方法
PDO::errorInfo()
方法与PDO::errorCode()
方法一样都是用于获取操作数据库句柄时所发生的错误信息。
不同的是errorInfo() 方法的返回值为一个数组,它包含了相关的错误信息。
接下来我们通过示例来看一下使用 PDO 中的 query 方法完成数据查询操作,并通过 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(); } ?>
上述示例中,我们查询了一个不存在的数据库,输出结果:
其中我们需要注意的是:PDO 和 PDOStatement 对象中都有 errorCode() 和 errorInfo() 方法,如果没有任何错误,errorCode() 返回的是 00000;否则就会返回一些错误代码。而 errorInfo() 返回的是一个数组,包括 PHP 定义的错误代码和 MySQL 的错误代码及错误信息。
大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。
以上是PHP資料庫學習之PDO怎麼進行錯誤處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!