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

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)){ 
        // 这里写入你处理每行数据的逻辑
    } 
} 
?>

额外提醒

  1. 永远要在header("Location: ...")之后加上exit()或die(),否则HTTP头发送后,脚本依然会继续执行后续代码,可能引发意想不到的问题。
  2. 建议你给mysqli查询加上错误捕获,比如用mysqli_error()查看具体的查询错误,方便后续排查问题。

内容的提问来源于stack exchange,提问作者Lars Holm Grau

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:28:38