PHP Conference Japan 2024

PDOStatement::errorCode

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

PDOStatement::errorCode 获取与语句句柄上的最后一次操作关联的 SQLSTATE

描述

public PDOStatement::errorCode(): ?string

参数

此函数没有参数。

返回值

PDO::errorCode() 相同,只是 PDOStatement::errorCode() 仅检索使用 PDOStatement 对象执行的操作的错误代码。

范例

示例 #1 获取 SQLSTATE 代码

<?php
/* 引起错误 -- BONES 表不存在 */
$err = $dbh->prepare('SELECT skull FROM bones');
$err->execute();

echo
"\nPDOStatement::errorCode(): ";
print
$err->errorCode();
?>

以上示例将输出

PDOStatement::errorCode(): 42S02

参见

添加注释

用户贡献的注释 2 条注释

vaclav dot sir at gmail dot com
18 年前
语句的 errorCode() 方法在执行之前返回空字符串,在成功执行后返回 '00000'(五个零)

<?php
$stmt
= $pdo->prepare($query);
assert($stmt->errorCode === '');

$stmt->execute();
assert($stmt->errorCode === '00000');
?>
dbeecher at tekops dot com
16 年前
如果您创建自己的异常处理程序,则此属性和 PDOStatement::errorInfo() 属性都不可用。

我使用的是 PHP 5.2.4,PDO_INFORMIX 1.2.0。

在设置您自己的异常处理程序后,在程序的任何点调用此函数都会产生错误

PHP 注意:new_query.php 第 _行中未定义的属性:PDOStatement::$errorCode



PHP 注意:new_query.php 第 _行中未定义的属性:PDOStatement::$errorInfo

但是如果我将 PDO 设置为 SILENT,只用

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT)

然后使用 if/else 处理对这些函数的调用,则可以正常工作。下面的示例只进行错误检查以显示此函数的结果代码。通常情况下,您会需要更多。

失败

$dbh = new PDO("informix...")
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

try {
$result = $dbh->query("asdfkjasdfkjasdfjk"); /* 明显的 SQL 错误 */
if ($result) print "success!";
}
catch
{
$myeCode = $dbh->errorCode();
/* 处理错误 */
};

$dbh=0;

错误处理程序被调用,但不知道 $dbh->errorCode 或 $dbh->errorInfo。

成功

$dbh = new PDO("informix...")
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);

$result = $dbh->query("asdfkjasdfkjasdfjk"); /* 明显的 SQL 错误 */
if ($result)
{
/* 处理结果 */
print "success!";

/* 全部完成,没有进行任何更改 */
$dbh->rollback();
}
else
{
$myeCode = $dbh->errorCode();
print_r($myeCode);
};

$dbh=0; /* 关闭连接 */

我希望这能帮助其他人。
致敬,
David
To Top