PDO::errorInfo

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

PDO::errorInfo 获取与数据库句柄上上次操作相关的扩展错误信息

描述

public PDO::errorInfo(): array

参数

此函数没有参数。

返回值

PDO::errorInfo() 返回一个数组,其中包含有关此数据库句柄执行的上次操作的错误信息。该数组至少包含以下字段

元素 信息
0 SQLSTATE 错误代码(ANSI SQL 标准中定义的五字符字母数字标识符)。
1 特定于驱动程序的错误代码。
2 特定于驱动程序的错误消息。

注意:

如果 SQLSTATE 错误代码未设置或没有特定于驱动程序的错误,则元素 0 之后的元素将被设置为 null

PDO::errorInfo() 仅检索对数据库句柄直接执行的操作的错误信息。如果您通过 PDO::prepare()PDO::query() 创建 PDOStatement 对象并在语句句柄上调用错误,则 PDO::errorInfo() 不会反映来自语句句柄的错误。您必须调用 PDOStatement::errorInfo() 来返回对特定语句句柄执行的操作的错误信息。

示例

示例 #1 显示连接到 DB2 数据库的 PDO_ODBC 连接的 errorInfo() 字段

<?php
/* 触发错误 - 无效的 SQL 语法 */
$stmt = $dbh->prepare('bogus sql');
if (!
$stmt) {
echo
"\nPDO::errorInfo():\n";
print_r($dbh->errorInfo());
}
?>

上面的示例将输出

PDO::errorInfo():
Array
(
    [0] => HY000
    [1] => 1
    [2] => near "bogus": syntax error
)

参见

添加笔记

用户贡献笔记 3 notes

39
alagar86 at gmail dot com
13 年前
请注意:如果 PDO::ATTR_EMULATE_PREPARES 为真,则此示例将无法正常工作。

您应该将其设置为 false

<?php
$dbh
->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
$stmt = $dbh->prepare('bogus sql');
if (!
$stmt) {
echo
"\nPDO::errorInfo():\n";
print_r($dbh->errorInfo());
}
?>
23
quickshiftin at gmail dot com
17 年前
以下是 sqlite 的错误代码,直接来自他们的网站

SQLite 版本 3 的错误代码与版本 2 相同。它们如下所示
#define SQLITE_OK 0 /* 成功的结果 */
#define SQLITE_ERROR 1 /* SQL 错误或缺少数据库 */
#define SQLITE_INTERNAL 2 /* SQLite 中的内部逻辑错误 */
#define SQLITE_PERM 3 /* 拒绝访问权限 */
#define SQLITE_ABORT 4 /* 回调例程请求中止 */
#define SQLITE_BUSY 5 /* 数据库文件被锁定 */
#define SQLITE_LOCKED 6 /* 数据库中的表被锁定 */
#define SQLITE_NOMEM 7 /* malloc() 失败 */
#define SQLITE_READONLY 8 /* 尝试写入只读数据库 */
#define SQLITE_INTERRUPT 9 /* sqlite_interrupt() 终止操作 */
#define SQLITE_IOERR 10 /* 发生某种类型的磁盘 I/O 错误 */
#define SQLITE_CORRUPT 11 /* 数据库磁盘映像格式错误 */
#define SQLITE_NOTFOUND 12 /* (内部专用)未找到表或记录 */
#define SQLITE_FULL 13 /* 插入失败,因为数据库已满 */
#define SQLITE_CANTOPEN 14 /* 无法打开数据库文件 */
#define SQLITE_PROTOCOL 15 /* 数据库锁定协议错误 */
#define SQLITE_EMPTY 16 /* (内部专用)数据库表为空 */
#define SQLITE_SCHEMA 17 /* 数据库模式已更改 */
#define SQLITE_TOOBIG 18 /* 表的一行数据太多 */
#define SQLITE_CONSTRAINT 19 /* 由于违反约束而中止 */
#define SQLITE_MISMATCH 20 /* 数据类型不匹配 */
#define SQLITE_MISUSE 21 /* 库使用不当 */
#define SQLITE_NOLFS 22 /* 使用主机不支持的操作系统功能 */
#define SQLITE_AUTH 23 /* 授权被拒绝 */
#define SQLITE_ROW 100 /* sqlite_step() 还有另一行准备就绪 */
#define SQLITE_DONE 101 /* sqlite_step() 已完成执行 */
7
mazen at mindcraftinc dot com
15 年前
某些 PDO 驱动程序返回更大的数组。例如,SQL Server 驱动程序返回 5 个值。

例如
<?php
$numRows
= $db->exec("DELETE FROM [TableName] WHERE ID between 6 and 17");
print_r($db->errorInfo());
?>

结果

数组
(
[0] => 00000
[1] => 0
[2] => (null) [0] (严重性 0) []
[3] => 0
[4] => 0
)
To Top