MySQLi count(*) 总是返回 1

Posted

技术标签:

【中文标题】MySQLi count(*) 总是返回 1【英文标题】:MySQLi count(*) always returns 1 【发布时间】:2011-04-06 11:58:05 【问题描述】:

我正在尝试计算表中的行数,并认为这是正确的方法:

$result = $db->query("SELECT COUNT(*) FROM `table`;");
$count = $result->num_rows;

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

这样做的正确方法是什么?

【问题讨论】:

【参考方案1】:

你必须获取那一条记录,它将包含 Count() 的结果

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

【讨论】:

谢谢!所以 num_rows 应该只用于SELECT * 而不是SELECT COUNT 或多或少,是的。 num_rows 可以告诉您有多少条结果记录已传输到客户端。如果这是您想知道的数字,那么您应该使用 num_rows。如果您想知道数据库中有多少条记录(不将数据传输到客户端),请使用 Count(*)。【参考方案2】:

始终尝试进行关联提取,这样您就可以轻松地在多个案例结果中获得您想要的结果

这是一个例子

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

【讨论】:

好奇多案例结果是什么意思?使用 case 语句进行多次计数的选择?【参考方案3】:

我觉得这种方式更具可读性:

$result = $mysqli->query('select count(*) as `c` from `table`');
$count = $result->fetch_object()->c;
echo "there are $count rows in the table";

并不是说我反对数组...

【讨论】:

【参考方案4】:

$result->num_rows;仅返回受查询影响的行数。当您对表执行计数(*)时,它只返回一行,因此您不能得到除 1 之外的其他结果。

【讨论】:

不正确。 mysqli_result::$num_rows 返回结果集的行数。 mysqli::$affected_rows 返回受查询影响的行数。

以上是关于MySQLi count(*) 总是返回 1的主要内容,如果未能解决你的问题,请参考以下文章

为啥 mysqli_insert_id() 总是返回 0?

为啥变量_count总是返回-1?

COUNT(*) 是不是总是返回结果?

Mysqli->error 返回一个空值

带有 count 的 UDF 总是返回 0,或者一个错误

JSON .count 数组在 Swift 4 中总是返回 0