PHP中MySQL查询结果无法多次在HTML中调用的问题求助
解决MySQL结果集只能输出一次的问题
这个问题我太熟悉啦!你遇到的情况是因为MySQL的结果集指针是单向移动的——第一次while循环调用fetch_assoc()时,指针会从结果集开头一步步移到末尾,当你第二次再用同一个结果集循环时,指针已经停在最后了,自然取不到任何数据。
下面给你两种靠谱的解决办法:
方法一:把结果集存入数组(推荐)
先一次性把所有查询结果读取到PHP数组里,之后就可以无限次循环这个数组,非常灵活:
// 先将查询结果全部存入数组 $userRecords = []; if ($ime_result->num_rows > 0) { while($row = $ime_result->fetch_assoc()) { $userRecords[] = $row; } }
之后在HTML里任意位置多次使用:
<!-- 第一次展示用户名 --> <?php foreach($userRecords as $record): ?> <h2><?php echo $record["Ime"]; ?></h2> <?php endforeach; ?> <!-- 第二次展示其他信息 --> <?php foreach($userRecords as $record): ?> <p>用户名:<?php echo $record["user_username"]; ?></p> <?php endforeach; ?>
方法二:重置结果集指针
如果不想存数组,也可以在每次循环前把结果集指针重置到开头,用data_seek(0)方法:
<!-- 第一次循环输出 --> <?php if ($ime_result->num_rows > 0) { while($row = $ime_result->fetch_assoc()) { echo "<h2>" . $row["Ime"] . "</h2>"; } // 把指针重置到结果集开头 $ime_result->data_seek(0); } ?> <!-- 第二次循环输出 --> <?php if ($ime_result->num_rows > 0) { while($row = $ime_result->fetch_assoc()) { echo "<p>" . $row["user_username"] . "</p>"; } } ?>
额外提醒:注意SQL注入风险
你的原查询直接把$_COOKIE['username']拼进了SQL语句,这存在严重的SQL注入风险!建议改用预处理语句来避免这个问题:
// 预处理查询,安全处理用户输入 $stmt = $mysqli->prepare("SELECT * FROM `users` WHERE user_username = ?"); $stmt->bind_param("s", $_COOKIE['username']); // "s"表示绑定字符串类型参数 $stmt->execute(); $ime_result = $stmt->get_result();
这样既安全,又能正常获取结果集~
内容的提问来源于stack exchange,提问作者rtstorm
相关产品推荐
相关产品推荐

