PHP关联三张表查询数据,数据库查询正常但前端页面显示无数据问题求助
排查PHP查询结果不显示的问题
我来帮你一步步找出问题所在——你在phpMyAdmin里能查到结果,但PHP代码却返回空,核心原因是你的PHP代码执行的查询其实没有返回任何数据,下面是几个关键排查点:
1. 先修复SQL语句的变量拼接错误
你写的查询语句存在语法问题:
$query = "SELECT members.usn, members.name, events.ename FROM members JOIN participant ON members.usn = participant.usn JOIN events ON events.eid = participant.eid WHERE members.usn='.$usn.'";
因为你用双引号包裹整个SQL字符串,里面的'.$usn.'不会被解析成变量,而是会被当成字符串的一部分。最终执行的SQL会变成:
SELECT ... WHERE members.usn='.$usn.'
这显然匹配不到任何数据,因为你的usn是7DC18CS005,不是.$usn.。
正确的写法有两种:
- 双引号内直接使用变量:
$query = "SELECT members.usn, members.name, events.ename FROM members JOIN participant ON members.usn = participant.usn JOIN events ON events.eid = participant.eid WHERE members.usn='$usn'"; - 或者用单引号包裹字符串,再拼接变量:
$query = 'SELECT members.usn, members.name, events.ename FROM members JOIN participant ON members.usn = participant.usn JOIN events ON events.eid = participant.eid WHERE members.usn="' . $usn . '"';
⚠️ 额外提醒:这种直接拼接变量的方式有SQL注入风险,建议使用参数化查询(mysqli预处理语句)更安全,示例:
$stmt = $conn->prepare("SELECT members.usn, members.name, events.ename FROM members JOIN participant ON members.usn = participant.usn JOIN events ON events.eid = participant.eid WHERE members.usn=?"); $stmt->bind_param("s", $usn); $stmt->execute(); $result = $stmt->get_result();
2. 确认SESSION中的usn是否正确获取
你提到用SESSION保存usn,但代码里没看到相关逻辑,要确保:
- 在使用SESSION前已经调用了
session_start();(必须放在页面最顶部,任何输出之前) - 正确从SESSION中取出usn:
$usn = $_SESSION['usn']; - 可以用
var_dump($usn);打印变量值,确认它确实是7DC18CS005
3. 修正循环中的数组取值方式(次要但需调整)
你用$row[0]、$row[1]这种数字索引,但fetch_assoc()返回的是关联数组,键名是数据库字段名,不是数字索引。所以循环里应该改成:
while($row = $result->fetch_assoc()) { echo '<tr>'; echo '<td>' . $row['usn'] . '</td>'; echo '<td>' . $row['name'] . '</td>'; echo '<td>' . $row['ename'] . '</td>'; echo '</tr>'; }
如果想用数字索引,可以改用fetch_row()代替fetch_assoc()。
调试小技巧
可以在执行查询前,打印出最终的SQL语句,看看是否和你在phpMyAdmin里执行的一致:
echo $query; // 检查输出的SQL是否正确
按上面的步骤调整后,应该就能正常显示查询结果了。
内容的提问来源于stack exchange,提问作者Strannngahhhh
相关产品推荐
相关产品推荐

