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

PHP MySQLi循环遍历SQL查询结果出现无限重复输出问题求助

问题修复:PHP MySQL查询无限循环输出

问题原因

你的代码陷入无限循环的核心原因是:将mysqli_query($conn, $sql)直接放在了while循环的条件中。每次循环都会重新执行SQL查询,生成一个全新的结果集,mysqli_fetch_assoc每次都会从新结果集的第一条数据开始读取,永远不会走到结果集末尾,因此会无限输出第一条记录的name值。

另外,直接将$_SESSION['username']拼接进SQL语句的写法存在SQL注入风险,这是需要同步修复的安全问题。

修复方案

方案1:先执行查询,再遍历结果集

将查询操作移到循环外部,先获取完整的结果集,再循环遍历该结果集:

<?php
require_once "connect.php";
session_start();

$username = $_SESSION['username'];
$sql = "SELECT `name`, `time-start`, `time-end` FROM `reminders` WHERE username = '$username';";
// 先执行查询,保存结果集
$result = mysqli_query($conn, $sql);
// 遍历已获取的结果集
while ($row = mysqli_fetch_assoc($result)) {
    echo $row["name"] . "<br>";
}
?>

方案2:使用预处理语句(推荐,解决安全问题)

直接拼接变量到SQL语句存在安全隐患,改用mysqli预处理语句是更规范、安全的写法:

<?php
require_once "connect.php";
session_start();

$username = $_SESSION['username'];
// 准备带占位符的预处理语句
$sql = "SELECT `name`, `time-start`, `time-end` FROM `reminders` WHERE username = ?;";
$stmt = mysqli_prepare($conn, $sql);
// 绑定参数("s"表示参数为字符串类型)
mysqli_stmt_bind_param($stmt, "s", $username);
// 执行预处理语句
mysqli_stmt_execute($stmt);
// 获取查询结果集
$result = mysqli_stmt_get_result($stmt);
// 遍历输出结果
while ($row = mysqli_fetch_assoc($result)) {
    echo $row["name"] . "<br>";
}
// 关闭语句与连接
mysqli_stmt_close($stmt);
mysqli_close($conn);
?>

修改后即可正确输出预期结果:

test
test1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:50:27