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

MySQL存在匹配记录但PHP执行查询返回空结果问题求助

问题排查与解决方案

1. 优先确认数据库连接一致性

这是该类问题最高发的原因:

  • 在PHP代码中执行以下语句,打印当前连接的库名和登录用户:
print_r(mysqli_fetch_assoc(mysqli_query($conn, "SELECT DATABASE() as db, USER() as user")));
  • 和你phpMyAdmin当前使用的库、登录用户做对比,确保二者访问的是同一个MySQL实例、同一个数据库,避免出现PHP连测试库、phpMyAdmin连生产库的情况。

2. 检查变量是否存在不可见字符

你echo出来的SQL看起来正常,但拼接用的变量可能包含零宽空格、全角空格、换行符等不可见字符,复制SQL的时候这些字符会被浏览器/终端自动过滤,导致直接运行正常、代码运行失败:

  • 对三个查询变量分别执行var_dump(),校验长度是否匹配:
var_dump($st_week, $en_week, $_POST['boat']);

比如boat的值是sapphire,正常长度应为8,如果输出长度大于8,说明存在不可见字符,可通过以下代码过滤后再使用:

$st_week = preg_replace('/[\x00-\x1F\x7F]/u', '', trim($st_week));
$en_week = preg_replace('/[\x00-\x1F\x7F]/u', '', trim($en_week));
$boat = preg_replace('/[\x00-\x1F\x7F]/u', '', trim($_POST['boat']));

3. 补全错误捕获逻辑定位问题

你当前的代码只判断了结果行数,没有捕获SQL执行报错,很多隐式错误会被忽略:
在mysqli_query执行后新增错误打印逻辑:

$result = mysqli_query($conn, $sql);
// 新增错误排查代码
if (!$result) {
    echo "MySQL执行错误:" . mysqli_error($conn);
    exit;
}

4. 改用预处理语句规避拼接风险

直接拼接SQL不仅存在SQL注入风险,还容易因为特殊字符转义异常导致问题,推荐改为mysqli预处理写法:

// 预处理SQL模板
$stmt = mysqli_prepare($conn, "SELECT * FROM disponibilities WHERE st_week = ? AND en_week = ? AND boat = ?");
// 绑定参数,sss表示三个参数都是字符串类型
mysqli_stmt_bind_param($stmt, "sss", $st_week, $en_week, $_POST['boat']);
// 执行查询
mysqli_stmt_execute($stmt);
// 获取结果集
$result = mysqli_stmt_get_result($stmt);

if (mysqli_num_rows($result) > 0) {
    $disponibility = mysqli_fetch_assoc($result);
} else {
    echo "0";
    echo $_POST['boat'];
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:42:00