php - 检测 PDO->execute 是否返回行/记录?

标签 php pdo execute

代码示例;

$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/

相关文章:

python - 标准输出 pymssql 到变量

php - 获取具有最新时间的行mysql codeigniter

php - 每次连接时如何让 PDO 运行 SET NAMES utf8,在 ZendFramework 中

sql - 通过执行变量中的语句从存储过程中获取SQLCODE和SQLSTATE

php - 使用PDO从php页面将具有更多列的表单数据插入mysql数据库

php - 使用 PDO 和 OOP 的 MySQL 查询问题

c# - 在 C# 中执行 SQL 语句?

javascript - 如何在 Google Chart 中显示 PHP 数组

php - 远程部署后 Yii 登录不起作用

php - 从带有路径列表的FTP服务器下载文件并下载列出的每个文件