当前位置: 首页 > 面试题库 >

PDO的行数

闻枫
2023-03-14
问题内容

周围有许多矛盾的说法。在PHP中使用PDO进行行计数的最佳方法是什么?在使用PDO之前,我只是简单地使用mysql_num_rows

fetchAll 是我不想要的东西,因为有时我可能要处理大型数据集,因此对我的使用不利。

你有什么建议吗?


问题答案:
$sql = "SELECT count(*) FROM `table` WHERE foo = bar"; 
$result = $con->prepare($sql); 
$result->execute(); 
$number_of_rows = $result->fetchColumn();

这不是最优雅的方式,而且还涉及额外的查询。

PDO有PDOStatement::rowCount(),这显然也 没有 在MySQL的工作。真痛苦

从PDO文档中:

对于大多数数据库,PDOStatement :: rowCount()不会返回受SELECT语句影响的行数。而是使用PDO ::
query()发出与所要SELECT语句相同的谓词的SELECT COUNT(*)语句,然后使用PDOStatement ::
fetchColumn()检索将返回的行数。然后,您的应用程序可以执行正确的操作。

编辑:上面的代码示例使用一个准备好的语句,在许多情况下,出于计数行的目的,可能是不必要的,因此:

$nRows = $pdo->query('select count(*) from blah')->fetchColumn(); 
echo $nRows;


 类似资料:
  • 问题内容: PDO显然无法计算从选择查询返回的行数(具有变量)。 有没有办法做到这一点,而无需使用? 问题答案: 根据手册,有一种 方法;但不应使用 (引用) : 对于大多数数据库, 不返回受语句影响的行数。 而是使用 发出与您的预期 语句相同的谓词的语句,然后使用 检索将返回的行数。 然后,您的应用程序可以执行正确的操作。 如果您已经有一个记录集,并且想知道其中有多少行,则必须使用一种方法来获取

  • 问题内容: 他们俩都做同一件事,只是做事不同吗? 除了使用之间还有什么区别 和 ? 问题答案: 运行标准SQL语句,并要求您正确转义所有数据,以避免SQL注入和其他问题。 运行一个准备好的语句,该语句使您可以绑定参数,以避免需要转义或引用参数。如果您多次重复查询,效果也会更好。准备语句的示例: 最佳实践是坚持准备好的语句并提高安全性。

  • 问题内容: 我经常看到使用PDO 或使用PDO的代码。是否只是出于某种原因而将论点转为皱眉? 我知道实际上绑定到了变量,并且可以设置两个方法都绑定的参数类型,但是如果仅插入字符串怎么办? 我经常看到上面的内容,但是我个人更喜欢: 它不是那么冗长,从视觉上来说,让输入“进入”查询对我来说更有意义。但是,我几乎看不到它的使用。 当您不必利用前者的特殊行为时,是否有理由更喜欢使用方法而不是传递参数? 问

  • 问题内容: 更新2: 那么这是它可以获得的最优化的吗? 更新1: 我知道我可以给sql查询增加限制,但是我也想摆脱foreach循环,这是我不应该需要的。 原始问题: 我有以下脚本,由于“ foreach”部分的缘故,它是从数据库返回许多行的良好IMO。 如果我知道我将总是只从数据库中获得1行,该如何优化它。如果我知道我只会从数据库中获得1行,我不明白为什么需要foreach循环,但是我不知道如何

  • pdo

    PDO Object Medoo是一个基于PDO的项目.你通过 $database->pdo, 能够使用更多的PDO方法, 预定义,事务 , 回滚 等. 更多关于 PDO 的使用, 请阅读: http://php.net/manual/en/class.pdo.php. Transaction (事务) $database->pdo->beginTransaction();$database->i

  • pdo

    PDO Object Medoo是一个基于PDO的项目.你通过 $database->pdo, 能够使用更多的PDO方法, 预定义,事务 , 回滚 等. 更多关于 PDO 的使用, 请阅读: http://php.net/manual/en/class.pdo.php. Transaction (事务) $database->pdo->beginTransaction();$database->i