PHP PDO ErrorInfo – 介紹和實(shí)例
PHP PDO 提供了一個(gè)用于獲取任何 PDO 操作錯(cuò)誤信息的方法。它是PDO類的方法之一,并且可以應(yīng)用于任何 PDO 預(yù)處理狀態(tài)句柄。該方法會(huì)返回一個(gè)包含出錯(cuò)信息的數(shù)組,其中必含 3 個(gè)元素,每個(gè)元素都帶有相關(guān)信息。
下面是一段短小的 PDO 錯(cuò)誤示例,其中我們嘗試連接數(shù)據(jù)庫時(shí)打印查詢失敗的相關(guān)信息:
try { $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); } catch (PDOException $e) { print "Error!: " . $e->getMessage() . " br/>"; die(); }
在這里,如果我們使用了一個(gè)錯(cuò)誤的用戶名、密碼或者用不可用的數(shù)據(jù)庫,連接就會(huì)失敗。這時(shí)候,錯(cuò)誤提示會(huì)自己輸出 pdo 錯(cuò)誤信息。它的輸出結(jié)果可以是類似于下面這樣的提示:
Error!: SQLSTATE[HY000] [1045] Access denied for user 'username'@'localhost' (using password: YES)
除了上面這個(gè)例子中捕獲的PDOException以外,無論何時(shí)使用PDO處理數(shù)據(jù)庫操作時(shí)發(fā)生錯(cuò)誤,都會(huì)返回一個(gè)錯(cuò)誤碼。您可以使用 PDO Errorinfo 來執(zhí)行此操作,如下所示:
$stmt = $dbh->prepare("SELECT * FROM test WHERE id = ?"); if ($stmt->execute( array( $id ))) { while ( $row = $stmt->fetch( PDO::FETCH_ASSOC ) ) { var_dump($row); } } $err = $stmt->errorInfo(); if ($err[0] !== PDO::ERR_NONE) { web_log('PDO Error: ' . $err[2] . '(', $err[0], ')'); }
在上述示例中,我們?cè)诓樵儓?zhí)行后檢查錯(cuò)誤信息。如果$stmt->execute
返回一個(gè)操作失敗代碼,我們將從$stmt->errorInfo()
數(shù)組中獲得錯(cuò)誤信息,然后將它們以易于閱讀的方式記錄在日志中。
這個(gè)errorInfo()
數(shù)組就是我們這里要介紹的 PDO 錯(cuò)誤信息傳回的具體解釋信息。
errorInfo() 返回 PDOStatement 類的對(duì)象。您檢索出其中所有錯(cuò)誤的信息可以如下:
- $errCode = $stmt->errorInfo()[0];
- $errMSG = $stmt->errorInfo()[1];
- $errInfo = $stmt->errorInfo()[2]; //錯(cuò)誤信息本身
每一個(gè)元素都是 PDOStatement 對(duì)象數(shù)組,它的意義如下:
- 元素0 - SQLSTATE (錯(cuò)誤代碼) 錯(cuò)誤狀態(tài)碼如 SQLSTATE[HY000],每個(gè)類型語句會(huì)有不同的狀態(tài)碼。
- 元素1 - 錯(cuò)誤代碼信息,對(duì)于數(shù)據(jù)庫廠商本身的錯(cuò)誤信息(例如 MySQL 返回的錯(cuò)誤代碼)。
- 元素2 - 錯(cuò)誤信息本身。
錯(cuò)誤信息數(shù)組可以非常有用和緊湊。你可以立即獲得錯(cuò)誤信息細(xì)節(jié)(尤其是在調(diào)試時(shí))或在日常使用中查看確切的錯(cuò)誤信息(log 文件、調(diào)試日志和資源)。
總之,您可以在 PHP PDO 中使用 errorInfo() 獲取 PDO 數(shù)據(jù)庫操作的錯(cuò)誤信息。無論您需要在代碼中以何種方式記錄錯(cuò)誤信息,PDO ErrorInfo 都是一個(gè)非常有用的工具。所以,明確 PDO 錯(cuò)誤信息的數(shù)組的每個(gè)元素的意義,就可以開始記錄和調(diào)試 PDO 錯(cuò)誤。