求助:数据库连接正常但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
相关产品推荐
相关产品推荐

