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

Prepared语句JSON编码返回空结果,报数组偏移访问空值错误求助

问题分析与修复方案

你的代码里有两个核心问题导致了空结果和错误提示,咱们一步步拆解解决:

1. 结果集处理逻辑错误

$stmt->get_result()返回的是一个**mysqli_result对象**,并非直接的行数据数组。你直接对这个对象调用json_encode(),PHP无法正确序列化数据库结果集对象,所以输出会是空值。

你需要先从结果集中提取实际的行数据,比如用fetch_assoc()方法获取关联数组:

if(isset($_POST["id"])){
    $stmt = $mysqli->prepare("SELECT * FROM account WHERE id = ?");
    $stmt->bind_param("s", $_POST["id"]);
    $stmt->execute();
    $result = $stmt->get_result(); // 先拿到结果集对象
    $row = $result->fetch_assoc(); // 从结果集中取出单行数据
    echo json_encode($row); // 现在序列化数组就能正常输出了
}

2. "Trying to access array offset on value of type null"错误的根源

这个错误通常是因为当查询没有匹配到数据时,fetch_assoc()会返回null。如果后续代码里你尝试像访问数组一样调用$row['某个字段'],就会触发这个错误。

解决办法是先判断$row是否有效,再进行后续操作:

if(isset($_POST["id"])){
    $stmt = $mysqli->prepare("SELECT * FROM account WHERE id = ?");
    $stmt->bind_param("s", $_POST["id"]);
    $stmt->execute();
    $result = $stmt->get_result();
    $row = $result->fetch_assoc();
    
    if($row){
        // 查询到数据时的处理
        echo json_encode($row);
    } else {
        // 没有匹配数据时的处理,比如返回提示信息
        echo json_encode(["message" => "No account found with this ID"]);
    }
}

额外排查建议

  • 开发环境下可以开启错误提示,方便快速定位问题:error_reporting(E_ALL); ini_set('display_errors', 1);
  • 确认$mysqli数据库连接是否成功,有时候连接失败也会导致后续操作返回null

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:52:56