使用Doctrine DBAL计算SELECT查询中的行数

pen*_*uin 10 php doctrine-orm

好的,所以我正在寻找一种简洁的方法来计算使用Doctrine DBAL的SELECT查询中的行数.

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

那么最好的方法是什么?我想这是因为我习惯了伟大的MySQLI属性num_rows!

Don*_*ong 18

使用Doctrine 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);
Run Code Online (Sandbox Code Playgroud)


pen*_*uin 15

实际上我觉得我看起来真的很难,但我刚刚遇到了这个Count Records返回的MySQL学说

所以这样做的rowCount()方法是通过这个方法.

例:

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

  • 请注意,对于所有数据库,rowCount不是100%可信任的,行为可能会根据您使用它的数据库而更改.此注释是从方法的源代码中复制粘贴的.***如果关联的Statement对象执行的最后一条SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数.但是,并不保证所有数据库都有这种行为,不应依赖于便携式应用程序.[链接](http://www.doctrine-project.org/api/dbal/2.4/source-class-Doctrine.DBAL.Driver.Statement.html#111-123)*** (8认同)
  • 只有你需要获取记录才有意义.否则,获取所有记录只是为了在PHP中计算它们是一个坏主意. (5认同)

Joh*_*art 5

我喜欢使用查询生成器。一个例子:

    $queryBuilder = $connection->createQueryBuilder();
    $queryBuilder->select('COUNT(*)');
    $queryBuilder->from("the_table");
    $queryBuilder->where('some_column = :theValue');
    $queryBuilder->setParameter('theValue', $someValue);

    return (int) $queryBuilder->execute()->fetchColumn();
Run Code Online (Sandbox Code Playgroud)