以下是我的代码片段:
$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)
如何更好地描述错误,以便调试问题?
答案 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());