我似乎无法从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();
}
只发表:
PDOStatement Object
(
[queryString] => @$%T$!!!
)
Array
(
[0] => 00000
[1] =>
[2] =>
)
setAttribute没有任何帮助。
这是PHP 5.3.3 Apache 2.0处理程序
启用MySQL的PDO驱动程序
客户端API版本mysqlnd 5.0.7-dev - 091210 - $ Revision:300533 $
如何获取错误信息?
答案 0 :(得分:64)
setAttribute 将导致PDO抛出错误或异常 - 这是执行查询时的最新错误或异常。
对于模拟的预准备陈述,prepare()
模拟的预处理语句不与数据库服务器通信,因此PDO :: prepare()不检查语句。
但是当查询被发送到服务器时,execute()
中会有一个。
然而,mySQL驱动程序支持自mySQL 4.1以来的本机预处理语句,所以这不适用。使用
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
必须导致您使用的查询出现异常。
答案 1 :(得分:4)
我也试图从数据库句柄级别的errorInfo()
获取信息,但我最终从PDOStatement::errorInfo()
每个PHP网站:
PDO :: errorInfo()仅检索直接在数据库句柄上执行的操作的错误信息。如果通过PDO :: prepare()或PDO :: query()创建PDOStatement对象并在语句句柄上调用错误,PDO :: errorInfo()将不会反映语句句柄中的错误。您必须调用PDOStatement :: errorInfo()以返回对特定语句句柄执行的操作的错误信息。
答案 2 :(得分:3)
这将打印错误代码及其相应的详细消息。
建议:这只是一个示范。只是用于调试目的。不允许在发布版本中向公众显示错误消息。
try{
connection=$this->get_connection();//here i brought my connection string
connection->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
connection->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
/**
Do your works here..
//$statement=$connection->prepare($sql);
//if you are using errorInfo use after prepare statement before execute.here in this method i am not using it.
//print_r($statement->errorInfo());
**/
$statement->execute();
}
catch(PDOException $e) {
//this will echo error code with detail
//example: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'nasme' in 'field list'
echo $e->getMessage();
}
//$statement=null;
答案 3 :(得分:2)
您需要首先execute
查询然后检查错误:所以这样做:
$sth->execute();
然后检查错误。然后你会得到错误,如果有的话。