语句的 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 注意: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