PDOStatement::errorCode()
(PHP 5 >= 5.1.0, PHP 7, PECL pdo >= 0.1.0)
获取跟上一次语句句柄操作相关的 SQLSTATE
说明
PDOStatement::errorCode(void): string
返回值
与PDO::errorCode()相同,只是PDOStatement::errorCode()只取回 PDOStatement 对象执行操作中的错误码。
范例
取回一个 SQLSTATE 码
<?php /* 引发一个错误 -- BONES 数据表不存在 */ $err = $dbh->prepare('SELECT skull FROM bones'); $err->execute(); echo "\nPDOStatement::errorCode(): "; print $err->errorCode(); ?>
以上例程会输出:
PDOStatement::errorCode(): 42S02
参见
- PDO::errorCode() 获取跟数据库句柄上一次操作相关的 SQLSTATE
- PDO::errorInfo() Fetch extended error information associated with the last operation on the database handle
- PDOStatement::errorInfo() 获取跟上一次语句句柄操作相关的扩展错误信息
Statement's errorCode() returns an empty string before execution, and '00000' (five zeros) after a sucessfull execution: <?php $stmt = $pdo->prepare($query); assert($stmt->errorCode === ''); $stmt->execute(); assert($stmt->errorCode === '00000'); ?>
Neither this property nor the PDOStatement::errorInfo() properties are available if you create your own exception handler. I am using PHP 5.2.4, PDO_INFORMIX 1.2.0. Making this call at any point in the program after setting your own exception handler produces an error: PHP Notice: Undefined property: PDOStatement::$errorCode in new_query.php on line or PHP Notice: Undefined property: PDOStatement::$errorInfo in new_query.php on line But if I set the PDO to SILENT, only set error codes with: $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT) Then process with if/else the call to this functions works fine. The examples below only do error checking to show the result codes of this function. Normally you would want more. FAILS: $dbh = new PDO("informix...") $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); try { $result = $dbh->query("asdfkjasdfkjasdfjk"); /* obvious sql error */ if ($result) print "success!"; } catch { $myeCode = $dbh->errorCode(); /* do stuff with error */ }; $dbh=0; The error handler gets called but knows nothing about $dbh->errorCode or $dbh->errorInfo. WORKS: $dbh = new PDO("informix...") $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); $result = $dbh->query("asdfkjasdfkjasdfjk"); /* obvious sql error */ if ($result) { /* process result */ print "success!"; /* all done, didn't make any changes */ $dbh->rollback(); } else { $myeCode = $dbh->errorCode(); print_r($myeCode); }; $dbh=0; /* close connection */ I hope this helps someone else. Cheers, David