代码示例;
$stmt = $db->prepare('SELECT u.username, u.display_name FROM users u WHERE u.id = :userId');
$stmt->bindValue(':userId', 10);
$stmt->execute();
使用准备 -> 执行。如果您确定查询将返回最多 1 行;有没有一种简单的方法来查看查询是否确实返回了一行?我看到每个人都在验证“rowCount”,但有没有更简洁的方法?
本文:http://www.christiansouth.com/php/pdo-getting-started-part-2-pdostatement/ 州;
TRUE if the query was successful FALSE if it wasn’t. The stumble here is it will ONLY return FALSE if the SQL has an error. So if the SQL is valid but return no rowset you will still get a TRUE return value.
这个说法对吗?因为 php.net 只谈论:
Returns TRUE on success or FALSE on failure.
那么,再次提出问题:
- 您是否真的无法使用 $stmt(在上面的示例中)验证是否返回了一行 bool 值?
- 是否有任何解决方案看起来比 if 中的“rowCount”更干净?
最佳答案
使用结果集(即 fetch
):是否有一行?
具有 0 条记录的结果集在“是否有效”方面仍然完全有效,这就是为什么在每个 有效查询执行
时返回 TRUE 的原因。在这种情况下,FALSE 应仅被视为异常条件。
另一方面,(第一个)fetch
的结果——结合查询将只返回 0..1 行的知识——可用于确定是否有单个行提取。由于这是访问此类查询数据的“标准”方式,因此无需执行额外检查。
关于php - 检测 PDO->execute 是否返回行/记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13390610/