fetch()的错误处理文档似乎不清楚,经过大量搜索,我没有在任何地方找到答案.如文档中所示,fetch的常用用法模型是:
while ( $row = $stmt->fetch() ) {
// do something with $row
}
Run Code Online (Sandbox Code Playgroud)
http://www.php.net/manual/en/pdostatement.fetch.php上的PHP文档说:
在所有情况下,失败时返回FALSE.
"失败"是什么意思?一个错误?无法获取更多行?我的问题是:当fetch()返回FALSE时,检测错误的最佳做法是什么?似乎在循环之后我需要区分错误情况和"不再行"的情况.
我应该调用$ stmt-> errorCode()并查看它是否为'00000'?
要处理查询错误(在获取时不会发生 sql 错误)和更一般的 PDO 错误,您应该尝试使用PDO::ERRMODE_EXCEPTION. 此外,实现 Traversable 返回的 PdoStatement ,因此您可以跳过简单查询query()的使用: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
}
Run Code Online (Sandbox Code Playgroud)
如果查询遇到错误(不是 fetch()),则会抛出异常。
当 Fetch 到达结果集末尾时,它总是返回 false。
当没有更多数据可供获取时,fetch() 将返回 false。还可能存在其他确实发生故障的情况,例如 mysql 死机或在执行获取循环时连接丢失。但一般来说,这种“真正的”失败相当罕见,而且您通常会得到“错误的结果,因为没有更多可用的数据”。
如果您确实对编写错误处理感到偏执,那么无论如何,请在 while 循环之后进行 sql 错误代码检查,以捕获确实发生问题的情况。