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

基于MySQL单行数据的IF-ELSE逻辑代码错误排查求助

你的PHP代码问题分析及修复

别着急,咱们一步步拆解你代码里的问题,这些都是新手常踩的小坑,改完就能正常运行啦:

核心错误点

  • die()位置完全错了:你把or die(mysql_error())写在了$sql变量赋值后面,这根本没用——$sql只是个字符串,不会触发错误判断!应该把它放在mysql_query()调用后面,只有执行查询时才会产生数据库错误,这时die()才能捕获并输出错误信息。
  • 混淆了「行数」和「行数据」:$row=mysql_num_rows($result)得到的是查询结果的行数(一个数字),不是数据表的行数据!要拿到entryScans字段的值,得用mysql_fetch_assoc($result)取出一行数据,这样$row才是包含字段的关联数组。
  • 条件判断用了赋值符号=:if($row['entryScans'] = 0)这是把0赋值给entryScans,而不是比较是否等于0,永远会返回true,逻辑直接跑偏了,应该用==(松散比较)或者===(严格比较)。
  • 语法错误:大括号没闭合:你的else if块后面少了一个},导致代码结构断裂,PHP解析肯定会报错。
  • 废弃函数+SQL注入风险:mysql_*系列函数早在PHP7就被移除了,强烈建议换成mysqli_*或者PDO;另外直接把$_POST参数拼进SQL语句,很容易被SQL注入攻击,这个必须修正。

修复后的代码(基于原逻辑优化)

我把代码改成了当前PHP支持的mysqli方式,同时修复了所有错误,还加了安全防护:

<?php
include ('config.php');

// 先检查POST参数是否存在,避免未定义索引警告
$TicketNo = isset($_POST["TicketNo"]) ? $_POST["TicketNo"] : '';
$hash = isset($_POST["hash"]) ? $_POST["hash"] : '';

// 使用mysqli预处理语句,彻底避免SQL注入
$sql = "SELECT TicketNo, hash, entryScans FROM `Tickets` WHERE `TicketNo` = ? AND `hash` = ?";
$stmt = mysqli_prepare($conn, $sql); // 假设config.php里的数据库连接变量是$conn
mysqli_stmt_bind_param($stmt, "ss", $TicketNo, $hash);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);

$output = "error"; // 默认值设为error,逻辑更清晰
if ($row = mysqli_fetch_assoc($result)) {
    // 成功获取到数据,再判断entryScans的值
    if ($row['entryScans'] === 0) {
        $output = "ok";
    } elseif ($row['entryScans'] > 0) {
        $output = "maybe";
    }
}

print(json_encode($output));
mysqli_close($conn);
?>

额外提醒

  1. 如果你之前的config.php用的是mysql_connect(),记得改成mysqli_connect(),保持函数系列统一;
  2. 预处理语句是现在操作数据库的标准写法,能有效防止SQL注入,一定要养成习惯哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:24:22