PHP Conference Japan 2024

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

参见

添加注释

用户贡献的笔记 1 条笔记

Matthias Leuffen
19 年前
嗨,

包含所有 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 ("包含语法错误的查询");
} catch (
PDOException $e) {
if (
$e->getCode() == '2A000')
echo
"语法错误: ".$e->getMessage();
}
?>

再见,
Matthias
To Top