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

如何遍历mysqli预处理语句的查询结果并输出对应数据

问题原因

  • SQL查询条件错误:你当前的筛选条件是hotspots.id = 用户ID,但hotspots表的id字段是热点自身的主键,关联用户账户的字段是owner_id,错误的筛选条件会导致你无法查到对应用户的所有热点数据,甚至查不到任何匹配结果
  • 未遍历查询结果:你只调用了一次$stmt->fetch(),只能获取第一条匹配的记录,无法输出用户的所有热点信息
  • 存在HTML语法错误:原有代码中欢迎语部分的p标签重复嵌套,会导致页面渲染异常

修正后的完整代码

<?php
include 'header.php';

// 从数据库查询当前用户的所有热点数据
$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->bind_result($hsid, $ownerid, $hsname, $hsaddress);
?>
<div class="content">

<p class="block">欢迎回来,<?=$_SESSION['name']?>!</p>

<table>
<tr>
<td>热点ID</td>
<td>热点名称</td>
<td>热点地址</td>
</tr>
<?php 
// 循环遍历所有查询结果,输出每条热点记录
while ($stmt->fetch()) : ?>
<tr>
<td><?=$hsid?></td>
<td><?=$hsname?></td>
<td><?=$hsaddress?></td>
</tr>
<?php endwhile; 
// 遍历完成后再关闭数据库语句对象
$stmt->close();
?>
</table>
    </div>
    </body>
</html>

修改说明

  • 修正了SQL查询的WHERE条件,改用owner_id匹配当前登录用户的ID,确保能查到该用户名下的所有热点数据
  • 移除了单次的$stmt->fetch()调用,换成while循环遍历所有查询结果,循环内输出每条热点的对应字段
  • 修复了HTML的p标签语法错误,补充了热点ID、地址的输出列,你可以根据需求调整展示的字段
  • 调整了$stmt->close()的调用时机,确保遍历完全部结果后再关闭数据库语句对象

内容的提问来源于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 11:27:02