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



代码示例;

$stmt = $db->prepare('SELECT u.username, u.display_name FROM users u WHERE u.id = :userId');
$stmt->bindValue(':userId', 10);
$stmt->execute();

使用prepare->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(在上面的示例中)作为布尔值
  • 有没有什么解决方案看起来比if中的"rowCount"更干净

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

具有0条记录的结果集在"是否有效"方面仍然完全有效,这就是为什么每个有效查询execute'ed都返回TRUE的原因。在这种情况下,FALSE应仅被视为异常条件

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

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

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

使用exec();

来自PHP手册:

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

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

最新更新