You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计MySQLi预编译SQL返回行数并存储到PHP变量中

PHP mysqli 预处理语句获取查询返回行数的实现方法

你可以通过以下两种常用方式实现需求,可根据你的实际业务场景选择:

方式1:不修改原有查询,同时支持遍历结果和获取行数

这种方式适合你既要循环输出查询结果,又要统计行数的场景,只需要在原有代码基础上补充2行代码即可:

  1. 执行execute()之后调用store_result()将结果集从MySQL服务端拉取到PHP客户端,这是num_rows属性能正确返回行数的前提
  2. 直接读取$stmt->num_rows属性拿到行数存入变量即可

完整可运行代码示例:

$stmt = $con->prepare('SELECT id, owner_id, hs_name, hs_address FROM hotspots WHERE owner_id = ?');
$stmt->bind_param('i', $_SESSION['id']);

$stmt->execute();
// 新增:拉取结果集到客户端
$stmt->store_result();
// 新增:获取行数存入变量
$row_count = $stmt->num_rows;

$stmt->bind_result($hsid, $ownerid, $hsname, $hsaddress);

while($stmt->fetch()) {
    // 原有循环输出结果的逻辑
}

// 页面中直接输出即可
echo "共查询到{$row_count}条符合条件的记录";

// 用完释放资源
$stmt->free_result();
$stmt->close();

方式2:仅需要统计行数不需要遍历结果,性能更优

如果你不需要获取具体的记录内容,只需要统计行数,直接使用COUNT(*)做查询即可,不需要拉取所有业务数据,性能更高:

$stmt = $con->prepare('SELECT COUNT(*) FROM hotspots WHERE owner_id = ?');
$stmt->bind_param('i', $_SESSION['id']);
$stmt->execute();
$stmt->bind_result($row_count);
$stmt->fetch();
$stmt->close();

// 直接使用$row_count变量即可
echo "共查询到{$row_count}条符合条件的记录";

注意事项

  • 方式1中如果省略store_result()调用,num_rows会始终返回0,这是很多人踩坑的点
  • 处理完结果集后记得调用free_result()释放内存,避免不必要的资源占用

内容的提问来源于stack exchange,提问作者James Grunshaw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 13:21:02