代码示例;
$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