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
15 年前
如果您创建自己的异常处理程序,则此属性和 PDOStatement::errorInfo() 属性都不可用。

我使用的是 PHP 5.2.4,PDO_INFORMIX 1.2.0。

在设置自己的异常处理程序后,在程序的任何地方进行此调用都会产生错误。

PHP Notice: Undefined property: PDOStatement::$errorCode in new_query.php on line



PHP Notice: Undefined property: PDOStatement::$errorInfo in new_query.php on line

但是,如果将 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; /* 关闭连接 */

我希望这对其他人有所帮助。
干杯!
大卫
To Top