mysqli查询无返回结果,代码调试遇阻寻求技术帮助
排查mysqli子查询无返回结果的问题
看起来你的数据库连接没问题,但查询没返回预期结果,咱们一步步来定位问题:
先验证SQL本身是否能返回数据
直接把这段SQL复制到你的数据库管理工具(比如phpMyAdmin、MySQL Workbench)里执行:SELECT `Namn`, `Efternamn` FROM `Elever` WHERE `ID` IN (SELECT `Användar ID` FROM `Elevgrupper` WHERE `Grupp ID` = 25)如果这里就没结果,那问题出在数据层面:要么
Grupp ID=25的记录压根不存在,要么对应的Användar ID在Elever表里找不到匹配项,或者是表名/字段名的大小写不匹配(MySQL在Linux系统下表名是区分大小写的)。获取mysqli的具体错误信息
你的代码只判断了$res是否为空,但没拿到具体的错误详情。修改代码把错误信息打出来,能帮你快速定位问题:$sql = "SELECT `Namn`, `Efternamn` FROM `Elever` WHERE `ID` IN (SELECT `Användar ID` FROM `Elevgrupper` WHERE `Grupp ID` = 25)"; $res = $link->query($sql); if (!$res) { // 输出具体错误内容 echo "查询出错: " . $link->error; exit; }比如如果是语法错误、权限不足这类问题,这里会明确告诉你原因。
正确处理结果集
你直接echo $res只会输出mysqli_result对象的字符串标识,不是实际的查询数据。要检查是否有记录,然后读取数据:// 检查结果行数 if ($res->num_rows === 0) { echo "没有找到匹配的学生记录"; } else { // 遍历所有查询结果 while ($row = $res->fetch_assoc()) { echo "姓名: " . $row['Namn'] . " " . $row['Efternamn'] . "<br>"; } }有时候查询本身是成功的,但就是没有匹配的数据,这时候
$res是有效的对象,但num_rows会是0。再次确认字段名的正确性
你的字段名带空格和特殊字符(比如Användar ID),虽然你已经用反引号包裹了,但还是要再确认一遍这些字段名在数据库里确实存在,拼写完全一致。
先按这几步排查,应该就能找到问题所在了。
内容的提问来源于stack exchange,提问作者helmjävel
相关产品推荐
相关产品推荐

