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

PHP条件判断异常:查询结果始终判定为0导致错误重定向求助

问题分析与修复方案

哥们,你的代码里有几个关键问题导致判断逻辑一直出错,我给你拆解并修正一下:

1. SQL查询语句的语法与安全问题

你写的SELECT currentlevel FROM users WHERE users={$_SESSION[user_id]}存在两处明显问题:

  • 字段名写错了:应该是user_id而非users,这会导致数据库找不到匹配字段,查询结果为空;
  • 数组索引未加引号:$_SESSION[user_id]要改成$_SESSION['user_id'],PHP中字符串类型的数组索引必须用引号包裹;
  • 直接拼接变量到SQL里有SQL注入风险,这是非常不安全的写法。

2. 错误判断了mysqli_query的返回值

mysqli_query()执行成功时返回的是结果集对象,不是你要的currentlevel数值。只有当查询完全失败(比如语法错误、数据库连接异常)时才会返回false。你现在判断$r == 0,结果集对象和0比较永远为真,所以不管怎样都会触发跳转。

修复后的代码示例

我给你改了安全且逻辑正确的版本,用预处理语句避免注入,同时正确获取和判断字段值:

// 先检查用户是否登录,避免未定义索引错误
if (!isset($_SESSION['user_id'])) {
    header("Location: login.php");
    exit;
}

// 使用预处理语句安全查询
$q = "SELECT currentlevel FROM users WHERE user_id = ?";
$stmt = mysqli_prepare($link, $q);
// 假设user_id是整数类型,用"i";如果是字符串类型则用"s"
mysqli_stmt_bind_param($stmt, "i", $_SESSION['user_id']);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);

// 获取查询到的用户数据
$user = mysqli_fetch_assoc($result);

// 处理判断逻辑
if (!$user || $user['currentlevel'] == 0) {
    header("Location: EXAMPLE-WEBSITE.co.uk");
    exit; // 跳转后必须终止代码执行,避免后续逻辑跑起来
} else {
    // currentlevel为1时执行的后续代码
    // ... 你的业务逻辑
}

额外提醒

  • 跳转后一定要加exit或die(),否则PHP会继续执行后续代码,可能引发意外问题;
  • 养成用预处理语句的习惯,这是防止SQL注入的标准做法;
  • 每次操作SESSION前最好先检查变量是否存在,避免出现警告信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:14:47