MySQLi count(*) 总是返回 1

46
我想要计算表格中的行数,认为下面的代码可以实现此功能:
$result = $db->query("SELECT COUNT(*) FROM `table`;");
$count = $result->num_rows;

但是counts总是返回(int)1。如果我在phpMyAdmin中使用相同的查询,我可以得到正确的结果。它位于一个表中,所以我也尝试测试$count [0],但返回NULL

应该如何正确地做这件事呢?

4个回答

107

您需要获取那一条记录,它将包含Count()的结果。

$result = $db->query("SELECT COUNT(*) FROM `table`");
$row = $result->fetch_row();
echo '#: ', $row[0];

所以,num_rows只应该用于SELECT *而不是SELECT COUNT?谢谢! - Lode
4
大致上是的,是的。num_rows 可以告诉你已经被传输到客户端的结果记录数。如果这就是你想知道的数字,那么你应该使用 num_rows。如果你想知道数据库中有多少条记录(而不需要将数据传输到客户端),请使用 Count(*)。 - VolkerK

12

始终尝试进行关联提取,这样您就可以轻松地在多个结果中获得所需的内容。

以下是一个例子:

$result = $mysqli->query("SELECT COUNT(*) AS cityCount FROM myCity")
$row = $result->fetch_assoc();
echo $row['cityCount']." rows in table myCity.";

你说的“multiple case result”是什么意思呢?是指使用case语句进行多个计数的select查询吗? - Mike Causer

3
我认为这种方式更易读:
$result = $mysqli->query('select count(*) as `c` from `table`');
$count = $result->fetch_object()->c;
echo "there are {$count} rows in the table";

并不是我有什么反对数组的意见...


0

$result->num_rows; 仅返回查询所影响的行数。当您在表上执行 count(*) 时,它仅返回一行,因此您不能获得除 1 以外的其他结果。


4
不正确。mysqli_result::$num_rows 返回结果集中的行数。mysqli::$affected_rows 返回被查询所影响的行数。 - user336063

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接