PHP结合MySQL生成嵌套JSON对象时嵌套组件报错问题咨询
MySQL嵌套JSON生成问题解决方案
报错与空白页修复
- 最初的
Unknown column 'KE.CE' in 'where clause'报错是字符串类型字段拼接未加引号导致,MySQL将KE.CE识别为字段名而非查询值。 - 字符串拼接后返回空白、预编译查询后返回空白的核心排查路径:
- 代码顶部开启错误提示,定位隐藏报错:
error_reporting(E_ALL); ini_set('display_errors', 1); - 90%以上概率为字段名不匹配:检查你第一步分组查询区域的返回字段,确认
region_code对应的数组键名是否真的是id,多数情况下该字段键名为region_code,取错键名会导致传入空值,查询无结果同时无报错输出。 - 标准mysqli预编译写法如下(避免SQL注入,性能更高):
// 预编译语句放在区域循环外初始化,仅执行一次 $countyStmt = $mysqli->prepare("SELECT county, v1, v2 FROM reporting_summary_county WHERE region_code = ?"); $countyStmt->bind_param("s", $currentRegionCode); // s指定参数为字符串类型 $result = []; // 遍历你第一步查到的区域列表 foreach ($regionList as $regionItem) { // 这里替换成你实际的区域code对应的键名!!! $currentRegionCode = $regionItem['region_code']; $countyStmt->execute(); $countyRes = $countyStmt->get_result(); // 处理revenue为纯值二维数组 $revenue = []; while ($countyRow = $countyRes->fetch_assoc()) { // 用array_values去掉键名,只保留字段值 $revenue[] = array_values($countyRow); } $regionItem['revenue'] = $revenue; $result[] = $regionItem; } // 最后输出json即可 echo json_encode($result, JSON_UNESCAPED_UNICODE);
- 代码顶部开启错误提示,定位隐藏报错:
纯值二维数组格式修复
- 之前返回带
county、v1、v2键名的数组,是因为直接将fetch_assoc返回的关联数组存入结果,通过array_values()处理单行查询结果即可去掉键名,得到纯值二维数组结构。
内容的提问来源于stack exchange,提问作者MikeM
相关产品推荐
相关产品推荐

