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

时间:2012-11-15 02:15:12

标签: 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如果不成功则为FALSE。绊倒在这里   如果SQL有错误,它只会返回FALSE。所以,如果SQL是   有效但不返回行集,您仍将获得TRUE返回值。

这句话是否正确?因为php.net只谈到:

  

成功时返回TRUE,失败时返回FALSE。

所以,再次提出问题:

  • 是否真的无法验证是否使用$ stmt(在上面的示例中)返回了一行 布尔值?
  • 是否有任何解决方案看起来更干净,然后'rowCount'在if?
  • 中敲击

3 个答案:

答案 0 :(得分:5)

使用结果集(即fetch):是否有一行?

具有0条记录的结果集在“工作正常”方面仍然完全有效,这也是每个有效查询execute编辑时返回TRUE的原因。在这种情况下,FALSE应仅被视为异常条件

另一方面,(第一个)fetch的结果 - 结合查询只返回0..1行的知识 - 可以用来确定是否有一行被提取。由于这是访问此类查询数据的“标准”方式,因此无需执行额外检查。

答案 1 :(得分:1)

只要您使用mysql,rowCount将为您提供结果集中的数字,而无需进行其他查询。其他数据库可能不准确支持rowCount,因此您必须先进行单独的选择计数(*)...查询。

至于你是否只在执行时得到true或false,这绝对是正确的,即使对于不返回任何行的查询也是如此。这是因为在关系理论中,空结果集是完全有效的,没有行的选择不是错误。

答案 2 :(得分:-3)

使用exec();

从PHP手册:

  

PDO :: exec()返回由您发出的SQL语句修改或删除的行数。如果没有行受到影响,PDO :: exec()将返回0.

http://php.net/manual/en/pdo.exec.php