Php PDO-行数-这是最短的路径吗?

Php PDO-行数-这是最短的路径吗?,php,pdo,mysqli,Php,Pdo,Mysqli,我意识到有很多关于从select获取PDO中的行数的帖子。。无聊 但是。。。我试图在尽可能少的行中完成这项工作,并且之后仍然能够在循环中使用记录集。这是怎么回事 $sql = "SELECT Name FROM my_table WHERE LastName = 'Wilson' "; $stmt = $conn->query($sql); $stmt->setFetchMode(PDO::FETCH_ASSOC); $row_count = count($stmt->fe

我意识到有很多关于从select获取PDO中的行数的帖子。。无聊

但是。。。我试图在尽可能少的行中完成这项工作,并且之后仍然能够在循环中使用记录集。这是怎么回事

$sql =  "SELECT Name FROM my_table WHERE LastName = 'Wilson' ";

$stmt = $conn->query($sql);
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$row_count = count($stmt->fetchAll());
$stmt = $conn->query($sql);

foreach ($stmt as $row) {

    echo $row['Id'];

}

我试过很多组合。。。但我似乎必须加倍使用$stmt=$conn->query($sql)之后是否能够使用循环?这能改进吗?

像这样的东西怎么样

$sql =  "SELECT * FROM my_table ";

$stmt = $conn->query($sql);
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$results = $stmt->fetchAll();
$row_count = count($results);

foreach ($results as $row) {

    echo $row['Id'];

}

这里没什么好说的。您要么获取结果数据,然后在PHP中计算行数,要么存储查询并运行两次—一次使用实际的
SELECT
,一次使用
SELECT count(*)
。如果查询使用的是索引,那也没什么大不了的。

老实说,我不明白整件rowcount()的事情

我有一个实时站点,如果我有:

$stmt = $pdo->query("SELECT type FROM vehicles WHERE del='N'");
echo $stmt->rowcount();
它返回46,这是正确的

这在我的开发服务器和托管服务器上都可以正常工作


据我所知,只有在查询中使用COUNT()时,rowcount()才起作用。如果我错了,肯定会有人纠正我。

一句话:糟透了。您执行同一查询两次,并且两次提取所有数据,一次甚至一次将所有数据都提取到内存中。这很糟糕。您正在1)执行
选择*
,这是一种糟糕的形式;2)您正在两次提取所有数据。只需使用
COUNT(*)
首先获取行数……如果表正在运行INNO引擎,则不使用
WHERE
子句,这是非常糟糕的。pdo rowcount()仅适用于此键!我删除了包含在实际select语句中的敏感数据,只添加了一个select*!问题的这一部分实际上无关紧要。无论如何,事实证明->rowcount在selects上与mysql配合得很好,这与许多网络用户所说的相反!当您使用
COUNT()
时,它仍然可以正常工作:它会告诉您
1
,因为聚合查询返回1行。它总是一样的。@deceze:是的,你说得很对——“不起作用”对我来说是个糟糕的选择,我应该把它编辑成“不起作用,正如一些人所期望的。”;)你完全正确。我正在连接mysql数据库,它工作正常!谢谢你的回答。