MySQL相当于mysql_num_rows。哪个更好?

时间:2013-01-17 08:19:46

标签: 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($results);

OR

$stmt = $db->query('SELECT * FROM table');
$count = $stmt->rowCount();

由于

4 个答案:

答案 0 :(得分:1)

你的问题对我没有意义。
正如您已经知道的那样,仅向数据库询问数量的行比要求所有行本身然后将​​它们计算出来要好 - 为什么您认为如果您使用的是不同的db驱动程序,那么它会不会出现?

要按字面意思回答您的问题:SELECT COUNT(*)不是“好的选择”,而是唯一正确计算行的方法,无论使用什么特定的API将查询发送到数据库。

然而,正如在评论中指出的那样 - 如果你已经在选择行,并且想要知道返回的行数 - 这将是相反的:运行额外的查询以获得计数将毫无意义,无论如何获取结果集行数的API函数是唯一正确的方法 但无论如何,这些问题与从一个API迁移到另一个API无关。

<强>更新
啊哈,看起来我找到了你的困惑的根源! 看起来你被错误的旧API与数据库服务器 - mysql共享它的名字 事实上,它是不同的事情--MySQL RDBMS是一个数据库服务器,而PHP中的mysql扩展只是一个访问该服务器的API(一组功能)。
PDO不是数据库服务器,而是另一个API。因此,您的查询中有无变化,但仅限于您用于将其发送到数据库的函数。希望它有所帮助。

答案 1 :(得分:1)

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

    SELECT data FROM table

获取您可以使用的数据。然后,您可以使用mysql_num_rows()(或PDO案例中的rowCount())来获取记录数(用于渲染,分页或其他)。

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

    SELECT COUNT(data) FROM table

因为您只选择数字的记录(确切地说,您正在计算data的非NULL值,请使用SELECT COUNT(*)来获取所有记录。

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

答案 2 :(得分:0)

没有SELECT COUNT的{​​{1}}将始终只返回包含1个字段的1行,即与GROUP BY条件匹配的行总数,在这种情况下就是一切。因此,对该结果执行PHP COUNT将始终返回count(),因为1数组中只有1个元素。因此,这两个中的选项2是唯一有效的。

答案 3 :(得分:0)

最好是这个

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

修改:删除了计数。

相关问题