PHP代码SQL无数据时报错:为何未执行页面跳转逻辑?
问题排查与解决方案
嘿,我来帮你揪出这个问题的根源!
核心问题:条件判断逻辑错误
你代码里的if ($hugo < 0)完全不符合mysqli_num_rows()的返回规则:
- 当查询有结果时,它返回匹配的行数(正整数)
- 当查询无结果时,它返回
0 - 只有当查询本身失败(比如SQL语法错误)时,它才会返回
false
也就是说,$hugo永远不可能小于0!哪怕数据库里没有数据,$hugo的值也是0,所以你的跳转逻辑永远不会触发,代码会直接进入else分支执行while循环。如果此时$sql2对应的查询也没有数据,或者$sql2本身是无效的查询资源,mysqli_fetch_array()就会抛出错误,这就是你看到第8行报错的原因。
修正后的代码
我给你调整了逻辑,同时加上了更严谨的错误处理和跳转后的终止操作:
<?php include "../conf/pagebilleder.php"; // 先检查$sql是否是有效的查询结果(避免查询本身失败的情况) if ($sql === false) { header("Location: ../index.php"); exit(); // 跳转后立即终止脚本,防止后续代码执行 } $hugo = mysqli_num_rows($sql); // 当无数据时执行跳转 if ($hugo == 0){ header("Location: ../index.php"); exit(); // 必须加这个,否则脚本会继续往下跑 } else { while($row = mysqli_fetch_array($sql2)){ // 这里写入你处理每行数据的逻辑 } } ?>
额外提醒
- 永远要在
header("Location: ...")之后加上exit()或die(),否则HTTP头发送后,脚本依然会继续执行后续代码,可能引发意想不到的问题。 - 建议你给mysqli查询加上错误捕获,比如用
mysqli_error()查看具体的查询错误,方便后续排查问题。
内容的提问来源于stack exchange,提问作者Lars Holm Grau
相关产品推荐
相关产品推荐

