PHP的PDO – 数行

PDO显然没有办法计算从select查询返回的行数( mysqli具有num_rowsvariables)。

有没有办法做到这一点,使用count($results->fetchAll())

根据手册,有一个PDOStatement->rowCount方法; 但不应该使用(引用)

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

如果你已经有一个logging集,并且想知道它有多less行,那么你必须使用一个fetch*方法来获取数据。 并使用计数 – 就像你build议的那样。

虽然PDO显然有一切手段来计算MySQL的select查询返回的行数,但更重要的是,这样的函数首先是没有用处的。

每次你有一个想法使用rowCount()进行SELECT查询时,它可能是多余的,甚至是有害的。 请参阅PDO rowCount() :

  • 如果你已经select了数据,这个function是多余的,因为你只需要计算数据
  • 如果你想使用这个函数来获取计数,这将是有害的,因为你永远不应该select数据来计算它。 只select计数,使用SELECT count(*)来代替。

另一个选项可能更接近mysqlinum_rowsvariables和相应的C API函数mysql_num_rows() 。 就是使用MySQL函数FOUND_ROWS()返回相同的信息,而不必再次计算结果中的所有logging。

例:

 $pdoDB->query('SELECT FOUND_ROWS()')->fetchColumn()