如何遍历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
相关产品推荐
相关产品推荐

