PHP PDO-mysqli_num_行的替代方案

PHP PDO-mysqli_num_行的替代方案,php,pdo,mysqli,Php,Pdo,Mysqli,使用mysqli,我可以通过使用mysqli_num_行从select查询中获取行数。在PDO中,我无法找到一种方法来实现这一点,而无需执行单独的查询,如selectcount(*)?当我已经有了一个记录集时,我不认为进行单独的查询有什么意义。在Pdo中,您使用的是行数。示例:$string->rowCount()尝试以下操作: $sql = "SELECT count(id) FROM `table` WHERE condition"; $result = $db->prepare($

使用mysqli,我可以通过使用mysqli_num_行从select查询中获取行数。在PDO中,我无法找到一种方法来实现这一点,而无需执行单独的查询,如
selectcount(*)
?当我已经有了一个记录集时,我不认为进行单独的查询有什么意义。

在Pdo中,您使用的是
行数
。示例:
$string->rowCount()

尝试以下操作:

$sql = "SELECT count(id) FROM `table` WHERE condition"; 
$result = $db->prepare($sql); 

$result->execute();
$row_count =$result->fetchColumn();
echo $row_count;
RTM:

对于大多数数据库,
PDOStatement::rowCount()
受SELECT语句影响的行数。请改用
PDO::query()以使用相同的
谓词作为预期的SELECT语句,然后使用
PDOStatement::fetchColumn()以检索将显示的行数
被退回。然后,应用程序可以执行正确的操作

我不想复制整个PHP.net页面,请阅读

为什么PDO没有
num_行


您可能认为有两个查询比较慢,但事实并非如此。PDO是多个数据库系统的通用客户端库,而不仅仅是MySQL。出于性能方面的原因,并非每个数据库系统都具有计算查询中select中的总行数的内部技术能力。要知道行的总数,需要先检查所有行,然后再为它们提供服务。

您可以使用所记录的
SQL\u CALC\u FOUND\u rows
。例如:

$result = $db->prepare("SELECT SQL_CALC_FOUND_ROWS id, name FROM fruit WHERE calories > 100"); 
$result->execute();
$result = $db->prepare("SELECT FOUND_ROWS()"); 
$result->execute();
$row_count =$result->fetchColumn();
echo $row_count;

当您有
LIMIT
子句时,此选项通常用于获取完全匹配计数,但是,如果没有一个子句,它就可以正常工作,并且比使用
COUNT(*)再次发出相同的查询要高效得多
因为它只检索由第一个查询值存储的计数值,而不必运行另一个完整查询。

什么类型的对象是
$string
?来自php.net:对于大多数数据库,PDOStatement::rowCount()不返回受SELECT语句影响的行数。@u\mulder,是否有其他方法?
rowCount()
返回受DELETE、INSERT或UPDATE语句影响的行数。它不适用于select。这会计算受影响的行。这就是我推荐的原因之一,如果你只使用MySQL,你就不用麻烦我的PDO,而是使用mysqli。我会在
RTM
中添加一个
F
:)对我来说不是这样的,但是yea:D RTFM让每个人都更容易。我读到了这篇文章,但是为什么我已经有了记录集,还需要单独查询?在我的op“我无法找到一种方法来使用PDO而不必执行单独的查询,如SELECT COUNT(*)”,返回受上一条SQL语句影响的行数“在
SELECT
@sol中没有受影响的行,我添加了一个解释(无参考)。我找到了一种方法,通过计算结果集
COUNT($result->fetchAll())
。不确定这是否比找到的行快?
$result = $db->prepare("SELECT SQL_CALC_FOUND_ROWS id, name FROM fruit WHERE calories > 100"); 
$result->execute();
$result = $db->prepare("SELECT FOUND_ROWS()"); 
$result->execute();
$row_count =$result->fetchColumn();
echo $row_count;