fetch()的错误处理文档似乎不清楚,经过大量搜索后我没有找到答案。如文档中所示,fetch的常用用法模型是:
while ( $row = $stmt->fetch() ) {
// do something with $row
}
http://www.php.net/manual/en/pdostatement.fetch.php的PHP文档说:
在所有情况下,失败时都会返回FALSE。
“失败”是什么意思?一个错误?无法获取更多行?我的问题是:当fetch()返回FALSE时,检测错误的最佳做法是什么?似乎在循环之后我需要区分错误情况和“不再行”的情况。
我应该拨打$ stmt-> errorCode()并查看它是否为'00000'?
答案 0 :(得分:4)
要处理查询错误(获取时不会发生sql错误)以及更常见的PDO错误,您应该尝试使用PDO::ERRMODE_EXCEPTION
。
此外,query()
返回的PdoStatement实现了Traversable,因此您可以跳过使用fetch()
进行简单查询:
try {
$db = new PDO('sqlite:mydb.db');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Set Errorhandling to Exception
foreach($db->query("SELECT...") as $row)
{
//Do domething
}
$db = null; // "Disconnect"
}
catch (PDOException $err) {
//Handling query/error
}
如果查询遇到错误(不是fetch()),则会抛出一个execption。
当结果到达结果集的末尾时,Fetch将始终返回false。
答案 1 :(得分:2)
fetch()将返回false。还可能存在其他确实存在故障的情况,例如在执行获取循环时,mysql死亡或连接丢失。但总的来说,这种“真正的”失败是相当罕见的,而且你经常会因为没有更多的数据而“虚假”。
如果你对编写错误处理真的很偏执,那么一定要在while循环之后进行一次sql错误代码检查,以便在事情确实爆炸时抓住案例。