PHP开发API时json_encode无返回,数据库查询正常却无JSON输出
问题排查及修复方案
核心故障原因
json_encode 仅支持UTF-8编码的输入数据,若查询出的数据包含非UTF-8字符(比如数据库编码为GBK/GB2312的中文内容),会直接返回false,导致无任何输出,是该场景下最常见的故障原因。同时你的代码还存在几处可优化/修复的点:
- CORS响应头拼写错误:
Acess-Control-Allow-Origin拼写遗漏字母c,正确为Access-Control-Allow-Origin,错误的头可能触发额外警告 - 无JSON编码异常兜底逻辑,编码失败时无任何提示信息
- 前后
$data类型不统一:查询有数据时是数组,无数据时是字符串,虽不影响编码但不符合API设计规范
具体修复步骤
- 先强制设置数据库返回数据的编码为UTF-8,在SQL查询前增加编码设置代码:
// 放在mysqli_query执行之前 mysqli_set_charset($conn, 'utf8mb4');
- 修正拼写错误的响应头
- 增加JSON编码异常兜底处理,替换原有的echo json_encode代码段:
$response = ["status"=>$status,"data"=>$data,"code"=>$code]; $jsonContent = json_encode($response); // 编码失败时返回错误提示 if ($jsonContent === false) { $jsonContent = json_encode([ "status" => false, "data" => "JSON编码失败:" . json_last_error_msg(), "code" => 0 ]); } echo $jsonContent;
- 开发阶段可在代码最开头开启错误显示,排查是否有其他隐藏问题(比如config.php提前输出了空格、BOM头、报错信息导致header失效):
ini_set('display_errors', 1); error_reporting(E_ALL);
内容的提问来源于stack exchange,提问作者Nazmina
相关产品推荐
相关产品推荐

