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 显示针对 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
)

参见

添加说明

用户贡献说明 4 说明

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' 没有默认值
)
我从未如此高兴地看到错误
*/
?>

虽然任何优秀的开发者都会始终注意并尝试捕获错误,但即使是最优秀的开发者也会犯错。这不是异常的替代品,但它的简单性是无价的。
Geoffrey Hoffman
9 年前
如果你的查询成功,PDO::errorInfo() 仍然返回一个数组。对于 MySQL 5.x,我得到以下结果...

数组
(
[0] => 00000
[1] =>
[2] =>
)
Deuchnord
9 年前
抱歉,我下面的示例不正确,这是更正

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