PHP的PDO – 数行
PDO显然没有办法计算从select查询返回的行数( mysqli
具有num_rows
variables)。
有没有办法做到这一点,使用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(*)来代替。
另一个选项可能更接近mysqli
的num_rows
variables和相应的C API函数mysql_num_rows()
。 就是使用MySQL函数FOUND_ROWS()
返回相同的信息,而不必再次计算结果中的所有logging。
例:
$pdoDB->query('SELECT FOUND_ROWS()')->fetchColumn()