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(): array

参数

此函数没有参数。

返回值

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
)

参见

添加注释

用户贡献的注释 3 条注释

Geoffrey Hoffman
9 年前
如果您的查询成功,PDO::errorInfo() 仍然返回一个数组。对于 MySQL 5.x,我得到以下结果...

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

如果这些看起来像你的谷歌搜索,那么你需要 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