PHP Conference Japan 2024

PDOStatement::errorInfo

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)

PDOStatement::errorInfo 取得與敘述句柄上最後一次操作相關聯的擴展錯誤資訊

說明

public PDOStatement::errorInfo(): 陣列

參數

此函式沒有參數。

回傳值

PDOStatement::errorInfo() 會傳回一個關於此敘述句柄執行的最後一次操作的錯誤資訊陣列。 該陣列至少包含以下欄位

元素 資訊
0 SQLSTATE 錯誤碼(ANSI SQL 標準中定義的五個字元字母數字識別碼)。
1 驅動程式特定的錯誤碼。
2 驅動程式特定的錯誤訊息。

範例

範例 #1 顯示 PDO_ODBC 連線到 DB2 資料庫的 errorInfo() 欄位

<?php
/* 觸發一個錯誤 -- BONES 資料表不存在 */
$sth = $dbh->prepare('SELECT skull FROM bones');
$sth->execute();

echo
"\nPDOStatement::errorInfo():\n";
$arr = $sth->errorInfo();
print_r($arr);
?>

以上範例會輸出

PDOStatement::errorInfo():
Array
(
    [0] => 42S02
    [1] => -204
    [2] => [IBM][CLI Driver][DB2/LINUX] SQL0204N  "DANIELS.BONES" is an undefined name.  SQLSTATE=42704
)

另請參閱

  • PDO::errorCode() - 取得與資料庫控制碼上最後一個操作相關聯的 SQLSTATE
  • PDO::errorInfo() - 取得與資料庫控制碼上最後一個操作相關聯的擴展錯誤資訊
  • PDOStatement::errorCode() - 取得與陳述式控制碼上最後一個操作相關聯的 SQLSTATE

新增註釋

使用者貢獻的註釋 3 則註釋

Geoffrey Hoffman
9 年前
即使您的查詢成功,PDO::errorInfo() 仍然會返回一個陣列。對於 MySQL 5.x,我會得到以下結果...

陣列
(
[0] => 00000
[1] =>
[2] =>
)
richardverason at gmail dot com
5 年前
說真的,errorInfo 是你的好朋友。使用它。

如果這些看起來像你的 Google 搜尋,那麼你需要 errorInfo

「PHP 中沒有顯示資料庫錯誤」
「PDO 可以從資料庫中選取,但無法插入」
「PDO 插入無效」
「PDO 是否只是一個大炒作,我應該回到 mysql 嗎?」
「外科醫生賺多少錢?」

相信我,如果你養成在開發中使用它的習慣,它絕對可以幫你省下數小時的抓狂時間。忘記 E-ALL,它讓我失望了,因為 E-ALL 顯然不知道我沒有在我的 MySQL 資料表中設定預設值,而我的查詢也沒有向其中添加任何內容。所以請務必這樣做

<?php

$sql
= '針對一個 mysql 資料表執行某些操作,條件是 foo = :bar';
$stmt = prepare($sql);
$stmt->bindValue(':bar', $foo, PDO::PARAM_[資料類型]);
$stmt->execute();

// 在開發過程中非常重要,但在正式環境中要移除
$foo_arr = $stmt->errorInfo();
print_r($foo_arr);

//print_r 範例回傳值
/*
Array(
[0] => HY000
[1] => 1364
[2] => 欄位 'phone' 沒有預設值
)
從來沒有這麼開心看到錯誤
*/
?>

雖然任何稱職的開發人員都會隨時注意並嘗試捕捉錯誤,但即使是最優秀的開發人員也會犯錯。這不能取代例外處理,但它的簡潔性是無價的。
To Top