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的主要内容,如果未能解决你的问题,请参考以下文章