Php MySQL相当于MySQL\u num\u行。哪个更好?

Php MySQL相当于MySQL\u num\u行。哪个更好?,php,mysql,pdo,Php,Mysql,Pdo,我正在将PHP中所有与mysql相关的内容转换为PDO格式。话虽如此,我还是要问些问题 我知道,与使用mysql_num_rows()来查找返回的行数不同,一个好的替代方法是 "SELECT COUNT(*) FROM table" 那么,有了PDO,是否更好: $stmt = $db->query('SELECT COUNT(*) FROM table'); $results = $stmt->fetchAll(PDO::FETCH_ASSOC); $count = count(

我正在将PHP中所有与mysql相关的内容转换为PDO格式。话虽如此,我还是要问些问题

我知道,与使用mysql_num_rows()来查找返回的行数不同,一个好的替代方法是

"SELECT COUNT(*) FROM table"
那么,有了PDO,是否更好:

$stmt = $db->query('SELECT COUNT(*) FROM table');
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
$count = count($results);


谢谢

A
SELECT COUNT
不带
groupby
将始终只返回一行和一个字段,这是符合
COUNT
条件的行总数,在本例中为所有行。因此,对该结果执行PHP
count()
将始终返回
1
,因为
$results
数组中只有1个元素。因此,这两个选项中的选项2是唯一有效的选项。

最好是这样

$nRows = $pdo->query('select count(*) from table')->fetchColumn(); 
echo $nRows;

编辑:删除计数。

你的问题对我来说毫无意义。
正如您已经知道的那样,只要求数据库中的行数要比要求所有行本身然后将它们计算出来要好得多-如果您使用的是不同的db驱动程序,为什么您认为会是相反的呢

从字面上回答您的问题:
SELECT COUNT(*)
不是一个“好的选择”,而是一种只对行进行计数的正确方法,无论使用何种特定API将查询发送到数据库

然而,正如在注释中指出的,如果您已经选择了行,并且想要知道返回的行数,则情况恰恰相反:运行额外的查询来获取行数是没有意义的,任何API函数来获取结果集的行数都是唯一正确的方法。
但无论如何,这些问题与从一个API迁移到另一个API无关

更新
啊哈,看来我找到了你困惑的根源
看起来您被旧API弄错了,该API与数据库服务器mysql同名。
事实上,这是不同的事情——MySQL RDBMS是一个数据库服务器,而PHP中的MySQL扩展只是一个访问该服务器的API(一组函数)。
PDO不是一个数据库服务器,而是另一个API。因此,在您的查询中,没有变化,但只在您用来将查询发送到数据库的函数中。希望有帮助。

我不会说这是“一个好的选择”。这是完全不同的

    SELECT data FROM table
获取您可以使用的数据。然后,您可以使用
mysql_num_rows()
(或在PDO情况下使用
rowCount()
)来获取记录数(用于呈现、分页或其他)

如果只需要记录数(而不是实际数据),则应使用

    SELECT COUNT(data) FROM table
由于您只选择了记录的数量(准确地说,您正在计算
数据的非空值
,请使用
选择计数(*)
获取所有记录)


如果您将后者与前者结合使用以获得两者,那么当两个查询之间的记录数发生变化时,您可能会遇到麻烦。

这不总是返回“1”,因为
count
总是存在的(但只是有一个不同的值?)。我猜他想查询一些数据,然后找出他到底得到了多少(做正确的渲染,或者其他什么)。不必查询两次。嗯,有时我需要知道的所有信息都可以由行数决定。对于php中的常规mysql函数,当我需要实际选择列并使用行数时,我会使用mysql_num_rows()。然而,当我只需要计算返回的行数时,我只需要使用SELECT COUNT(*)。PDO对我来说相当陌生。是否要使用
SELECT
ed数据?因为那样的话,第二个更好。第一个甚至不返回数据,它是PHP。网络上到处都是代码,建议
SELECT*
/
num\u rows
获取计数。从这个角度来看,
SELECT COUNT(*)
确实是更好的选择;)
    SELECT COUNT(data) FROM table