PDO::errorCode

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

PDO::errorCode 获取与数据库句柄上的上次操作关联的 SQLSTATE

描述

public PDO::errorCode(): ?string

参数

此函数没有参数。

返回值

返回一个 SQLSTATE,一个 ANSI SQL-92 标准中定义的五字符字母数字标识符。简而言之,SQLSTATE 由一个两位字符的类别值和一个三位字符的子类别值组成。类别值为 01 表示警告,并伴随 SQL_SUCCESS_WITH_INFO 的返回码。除 '01' 类别外,其他类别值(除了 'IM' 类别)表示错误。'IM' 类别专门针对源自 PDO(或可能是 ODBC,如果您使用的是 ODBC 驱动程序)本身的实现的警告和错误。任何类别中的子类别值 '000' 表示该 SQLSTATE 没有子类别。

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

如果在数据库句柄上没有运行任何操作,则返回 null

示例

示例 #1 检索 SQLSTATE 代码

<?php
/* 引起错误 -- BONES 表不存在 */
$dbh->exec("INSERT INTO bones(skull) VALUES ('lucy')");

echo
"\nPDO::errorCode(): ", $dbh->errorCode();
?>

上面的示例将输出

PDO::errorCode(): 42S02

参见

添加备注

用户贡献的备注 3 备注

Matthias Leuffen
18 年前
嗨,

包含所有 SQL-92 SQLSTATE 返回代码的列表
http://www.unix.org.ua/orelly/java-ent/jenut/ch08_06.htm

使用以下代码让 PDO 在错误时抛出异常 (PDOException)。

<?PHP
$pdo
= new PDO (whatever);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
$pdo->exec ("QUERY WITH SYNTAX ERROR");
} catch (
PDOException $e) {
if (
$e->getCode() == '2A000')
echo
"Syntax Error: ".$e->getMessage();
}
?>

再见,
Matthias
runrioter at gmail dot com
9 年前
这段文字说“如果在数据库句柄上没有运行任何操作,则返回 NULL”。

当我根据 pdo-mysql 测试它时,我得到的是 00000,而不是 NULL!
To Top