2013-02-04 25 views
8

好吧,我正在寻找一种简洁而又简单的方法来统计使用Doctrine DBAL的SELECT查询的行数。使用Doctrine DBAL来统计SELECT查询中的行数

我知道我可以SELECT COUNT(*)但我需要在获取结果时对数组进行排序。或者,有人建议查看getScalarResult()。但我似乎无法找到关于此的任何文档,除了DQL(这是一个不同的项目)。

那么最简单的方法是什么?我想这是因为我已经习惯了很棒的MySQLI属性num_rows

+0

推荐阅读http://stackoverflow.com/questions/883365/row-count-with-pdo这与doctrine DBAL的功能非常相似。 – fyrye

回答

10

其实我想我已经看了真的很辛苦,但我只是碰到这个Count Records Returned MySQL Doctrine

于是方式做到这一点是通过rowCount()方法。

例子:

$num_rows = $conn->executeQuery("SELECT * FROM users")->rowCount();

+5

只有你无论如何需要获取记录才有意义。否则提取所有记录只是为了计算它们在PHP中的表现并不明智。 – eReiche

+5

请注意rowCount对于所有数据库都不是100%可信的,其行为可能会根据您使用的数据库而改变。该评论是从该方法的源代码复制粘贴的。 ***如果由关联的Statement对象执行的最后一条SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数。但是,不能保证所有数据库的这种行为,并且不应该依赖便携式应用程序。 [链接](http://www.doctrine-project.org/api/dbal/2.4/source-class-Doctrine.DBAL.Driver.Statement.html#111-123)*** – casivaagustin

15

另一种方式与原则DBAL要做到这一点是得到计数作为一个字段,并返回列

$sql = "SELECT count(*) AS Total FROM myTable WHERE myId = :myId"; 
    $stmt = $conn->prepare($sql); 
    $stmt->bindValue('myId', $myId, PDO::PARAM_INT); 
    $stmt->execute(); 
    $count = $stmt->fetchColumn(0); 
相关问题