©
This document uses PHP Chinese website manual Release
(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)
PDO::errorCode — 获取跟数据库句柄上一次操作相关的 SQLSTATE
返回一个 SQLSTATE,一个由5个字母或数字组成的在 ANSI SQL 标准中定义的标识符。 简要地说,一个 SQLSTATE 由前面两个字符的类值和后面三个字符的子类值组成。 class value of 01 indicates a warning and is accompanied by a return code of SQL_SUCCESS_WITH_INFO. Class values other than '01', except for the class 'IM', indicate an error. The class 'IM' is specific to warnings and errors that derive from the implementation of PDO (or perhaps ODBC, if you're using the ODBC driver) itself. The subclass value '000' in any class indicates that there is no subclass for that SQLSTATE.
PDO::errorCode() only retrieves error codes for operations performed directly on the database handle. If you create a PDOStatement object through PDO::prepare() or PDO::query() and invoke an error on the statement handle, PDO::errorCode() will not reflect that error. You must call PDOStatement::errorCode() to return the error code for an operation performed on a particular statement handle.
如果数据库句柄没有进行操作,则返回 NULL
。
Example #1 取得一个 SQLSTATE 码
<?php
$dbh -> exec ( "INSERT INTO bones(skull) VALUES ('lucy')" );
echo "\nPDO::errorCode(): " ;
print $dbh -> errorCode ();
?>
以上例程会输出:
PDO::errorCode(): 42S02
[#1] runrioter at gmail dot com [2014-12-14 15:51:31]
This reading says that "Returns NULL if no operation has been run on the database handle".
When I tested it based on pdo-mysql, I got 00000, not NULL!
[#2] Matthias Leuffen [2005-12-04 04:36:18]
Hi,
List containing all SQL-92 SQLSTATE Return Codes:
http://www.unix.org.ua/orelly/java-ent/jenut/ch08_06.htm
Use the following Code to let PDO throw Exceptions (PDOException) on Error.
<?PHP
$pdo = new PDO (whatever);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
$pdo->exec ("QUERY WITH SYNTAX ERROR");
} catch (PDOException $e) {
if ($e->getCode() == '2A000')
echo "Syntax Error: ".$e->getMessage();
}
?>
Bye,
Matthias