You*_*nse 59 php error-handling pdo
我似乎无法从PDO收到任何错误消息:
#$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
try {
$sth = $dbh->prepare('@$%T$!!!');
print_r($sth);
print_r($dbh->errorInfo());
} catch (PDOException $e) {
echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)
它只给出:
PDOStatement Object
(
[queryString] => @$%T$!!!
)
Array
(
[0] => 00000
[1] =>
[2] =>
)
Run Code Online (Sandbox Code Playgroud)
setAttribute没有任何帮助.
这是PHP 5.3.3
支持MySQL的Apache 2.0 Handler PDO驱动程序
客户端API版本mysqlnd 5.0.7-dev - 091210 - $ Revision:300533 $
我该怎么做才能获得错误信息?
Pek*_*ica 65
setAttribute 将导致PDO抛出错误或异常 - 执行查询时的最新错误或异常.
对于模拟准备好的陈述,没有签到prepare():
模拟的预准备语句不与数据库服务器通信,因此PDO :: prepare()不检查语句.
但是execute()当查询被发送到服务器时会有一个.
但是,mySQL驱动程序支持自mySQL 4.1以来的本机预处理语句,所以这不适用.运用
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
Run Code Online (Sandbox Code Playgroud)
必须导致您使用的查询的异常.
errorInfo()我也试图从数据库句柄级别获取信息,但最终我从语句级别获取信息PDOStatement::errorInfo()
每个 PHP 网站:
PDO::errorInfo() 仅检索直接在数据库句柄上执行的操作的错误信息。如果通过 PDO::prepare() 或 PDO::query() 创建 PDOStatement 对象并在语句句柄上调用错误,PDO::errorInfo() 将不会从语句句柄反映错误。您必须调用 PDOStatement::errorInfo() 来返回在特定语句句柄上执行的操作的错误信息。
您需要先execute查询,然后检查错误:所以这样做:
$sth->execute();
Run Code Online (Sandbox Code Playgroud)
然后检查是否有错误。然后你会得到错误(如果有的话)。