PHP 8.3.4 Released!

PDOStatement::errorInfo

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

PDOStatement::errorInfo 文ハンドラにおける直近の操作に関連する拡張エラー情報を取得する

説明

public PDOStatement::errorInfo(): array

パラメータ

この関数にはパラメータはありません。

戻り値

PDOStatement::errorInfo() は、 この文ハンドラによって実行された直近の操作に関するエラー情報を 配列として返します。この配列は少なくとも次のフィールドを含みます。

要素 情報
0 SQLSTATE エラーコード (これは、ANSI SQL 標準で定義された英数 5 文字の ID)
1 ドライバ固有のエラーコード
2 ドライバ固有のエラーメッセージ

例1 DB2 データベースに対する PDO_ODBC 接続の 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 を取得する

add a note

User Contributed Notes 4 notes

up
10
richardverason at gmail dot com
4 years ago
Seriously errorInfo is your friend. Use it.

If these look like your google searches then you need errorInfo

"no database error showing in php"
"pdo selects from database but wont insert"
"pdo insert not working"
"isnt pdo just a big hype, should I go back to mysql?"
"how much do surgeons make?"

Trust me it will definitely save you hours of insanity if you make it a habit to use it in development. Forget E-ALL, it failed me since well, E-ALL apparently doesn't know that I didn't set a default value in my MySQL table and my query wasnt adding anything to it. So always do this

<?php

$sql
= 'do something on a mysql table where foo = :bar';
$stmt = prepare($sql);
$stmt->bindValue(':bar', $foo, PDO::PARAM_[DATA TYPE]);
$stmt->execute();

// very important during development. But take it off in production
$foo_arr = $stmt->errorInfo();
print_r($foo_arr);

//Sample print_r return
/*
Array(
[0] => HY000
[1] => 1364
[2] => Field 'phone' doesn't have a default value
)
Never have I been so happy to see an error
*/
?>

While its common practice for any decent developer to always watch out and try to catch for errors, even the best of us make mistakes. This is not a replacement for exceptions, but the simplicity is priceless.
up
16
Geoffrey Hoffman
8 years ago
If your query is successful, PDO::errorInfo() still returns an array. For MySQL 5.x, I get the following...

Array
(
[0] => 00000
[1] =>
[2] =>
)
up
-39
Deuchnord
8 years ago
Sorry, my example below is not correct, this is a correction:

<?php
$listOfUsers
= $db->query('SELECT name from uesrs');
$errorInfo = $listOfUsers->errorInfo();
if(
$errorInfo[0] != 0)
die(
$errorInfo[2]);
?>
To Top