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

求助:数据库连接正常但json_encode($data)输出NULL问题排查

解决json_encode输出NULL的问题

嘿,我帮你揪出几个导致json_encode($data)输出NULL的关键问题啦,咱们一个个说:

1. SQL语句的语法错误是核心问题

你写的SQL语句里有两个明显错误:

  • 把字符集设置语句和查询语句硬凑在一起,还加了多余的单引号,MySQL根本没法解析这种语句;
  • 表名course_details用了单引号包裹,MySQL里表名只能用**反引号(`)**或者直接省略(表名无特殊字符时),单引号是用来包字符串的,用在表名上直接会导致查询失败。

正确的做法是分开执行字符集设置和查询语句,比如先设置utf8字符集,再执行查询。

2. 数据库连接变量名不一致

你开头检查连接用的是$con,但die语句里写成了$conn,变量名不统一不仅会导致连接失败时的错误信息不对,后续如果不小心混用还会引发更多问题,一定要保持变量名一致!

3. 没做查询成功校验

执行mysqli_query后没有判断查询是否成功,如果SQL语法错误,$q会返回false,这时候mysqli_fetch_object根本不会执行,$data就一直是空数组,再加上字符集问题,就容易让json_encode返回NULL。


修正后的完整代码

<?php
// 开启错误报告,方便调试(上线后可以关掉)
error_reporting(E_ALL);
ini_set('display_errors', 1);

include "db.php"; 

// 检查连接,保持变量名统一为$con
if ($con->connect_error) {
    die("Connection failed: " . $con->connect_error); 
}
echo "Connected successfully";

// 单独设置字符集,确保中文等特殊字符能被正确编码
mysqli_query($con, "SET CHARACTER SET utf8");

$data = array();
// 修正SQL语句,表名不用单引号
$q = mysqli_query($con, "SELECT * FROM course_details");

// 先判断查询是否成功
if ($q) {
    while ($row = mysqli_fetch_object($q)) {
        $data[] = $row;
    }
} else {
    // 输出SQL错误信息,方便排查问题
    echo "<br>SQL Error: " . mysqli_error($con);
}

// 检查json_encode是否成功,失败时输出错误原因
$jsonResult = json_encode($data);
if ($jsonResult === false) {
    echo "<br>JSON Encode Error: " . json_last_error_msg();
} else {
    echo "<br>" . $jsonResult;
}

// 记得关闭数据库连接
$con->close();
?>

额外提示

如果还是有问题,可以打开错误报告(代码里已经加了),这样能直观看到哪里出了错,比如字符编码问题或者SQL语法问题,都能快速定位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:07:43