语句的 errorCode() 在执行之前返回空字符串,在成功执行之后返回 '00000'(五个零)。
<?php
$stmt = $pdo->prepare($query);
assert($stmt->errorCode === '');
$stmt->execute();
assert($stmt->errorCode === '00000');
?>
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)
PDOStatement::errorCode — 获取与语句句柄上的最后操作关联的 SQLSTATE
此函数没有参数。
与 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
语句的 errorCode() 在执行之前返回空字符串,在成功执行之后返回 '00000'(五个零)。
<?php
$stmt = $pdo->prepare($query);
assert($stmt->errorCode === '');
$stmt->execute();
assert($stmt->errorCode === '00000');
?>
如果您创建自己的异常处理程序,则此属性和 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; /* 关闭连接 */
我希望这对其他人有所帮助。
干杯!
大卫