PDO错误消息?

时间:2010-10-22 18:34:24

标签: php pdo

以下是我的代码片段:

$qry = '
    INSERT INTO non-existant-table (id, score) 
    SELECT id, 40 
    FROM another-non-existant-table
    WHERE description LIKE "%:search_string%"
    AND available = "yes"
    ON DUPLICATE KEY UPDATE score = score + 40
';
$sth = $this->pdo->prepare($qry);
$sth->execute($data);

print_r($this->pdo->errorInfo());

这应该给我一个错误,因为表甚至不存在。但我得到的只是:

  

数组([0] => 00000)

如何更好地描述错误,以便调试问题?

4 个答案:

答案 0 :(得分:87)

请改为尝试:

print_r($sth->errorInfo());

在准备之前添加:

$this->pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );

这将更改PDO错误报告类型,并在出现PDO错误时使其发出警告。它应该可以帮助你追踪它,虽然你的errorInfo应该有赌注设置。

答案 1 :(得分:4)

旧线程,但也许我的回答会帮助某人。我通过先执行查询,然后设置一个errors变量,然后检查错误变量数组是否为空来解决。见简化示例:

PART_CollectionView.Tag

答案 2 :(得分:3)

也许这篇文章太旧了但它可能有助于作为一个有关此事的人的建议: 而不是使用:

 print_r($this->pdo->errorInfo());

使用PHP implode()函数:

 echo 'Error occurred:'.implode(":",$this->pdo->errorInfo());

这应该打印您在使用某些SQL用户界面时通常会得到的错误代码,详细错误信息等。

希望有所帮助

答案 3 :(得分:2)

从手册:

  

如果数据库服务器成功   准备声明,PDO :: prepare()   返回PDOStatement对象。如果   数据库服务器无法成功   准备声明,PDO :: prepare()   返回FALSE或发出PDOException   (取决于错误处理)。

prepare语句可能导致错误,因为db无法准备语句。在准备查询之后和执行之前,请立即尝试测试错误。

$qry = '
    INSERT INTO non-existant-table (id, score) 
    SELECT id, 40 
    FROM another-non-existant-table
    WHERE description LIKE "%:search_string%"
    AND available = "yes"
    ON DUPLICATE KEY UPDATE score = score + 40
';
$sth = $this->pdo->prepare($qry);
print_r($this->pdo->errorInfo());