PHP数组插入变量后无法执行json_encode输出问题排查
问题排查与解决方案
嘿,我仔细捋了你的代码,发现几个关键问题,这应该就是导致json_encode毫无输出的根源:
1. 致命语法错误(最直接原因)
在getPlaces函数里,你写了这行代码:
$lng = row["longitude"];
这里的row前面少了$符号!正确写法应该是:
$lng = $row["longitude"];
这个低级语法错误会直接让PHP脚本终止执行,后面的echo json_encode($response)根本没机会运行,这是核心问题。
2. 缺失错误调试信息
你的代码对数据库查询的错误处理太简略了,当mysqli_query失败时,只返回false,但你完全不知道具体是哪里出了问题。建议修改getPlaces函数,加上错误日志输出:
public function getPlaces() { $places = array(); $stmt = "SELECT * FROM poi "; $retval = mysqli_query( $this->conn, $stmt ); if ($retval) { while($row=mysqli_fetch_array($retval)) { $name = $row["name"]; $lat = $row["latitude"]; $lng = $row["longitude"]; // 修正$符号问题 $desc = $row["descricao"]; $rating = $row["rating"]; $lm = $row["lm"]; $la = $row["la"]; $lv = $row["lv"]; $places[] = array( 'name'=> $name, 'lat'=> $lat, 'lng'=> $lng, 'desc'=> $desc, 'rating'=> $rating, 'lm'=> $lm, 'la'=> $la, 'lv'=> $lv ); } return $places; } else { // 记录具体错误信息,方便调试 error_log("数据库查询错误:" . mysqli_error($this->conn)); return false; } }
3. 字符编码潜在隐患
如果数据库里的字段内容不是UTF-8编码,json_encode会因为无法解析非UTF-8字符而返回false,导致无输出。建议你:
- 检查数据库表的字符集,确保是
utf8mb4(支持所有Unicode字符) - 在数据库连接完成后,设置mysqli的字符集:
// 在DB_Functions类的构造函数里添加 mysqli_set_charset($this->conn, 'utf8mb4');
4. 开启PHP错误提示(调试必备)
调试阶段可以开启PHP的错误显示,这样能第一时间看到脚本中的语法或运行时错误:
// 在脚本最开头添加 error_reporting(E_ALL); ini_set('display_errors', 1);
把这些问题逐一修复后,应该就能正常输出JSON数据了。
内容的提问来源于stack exchange,提问作者Helio Trigueiros
相关产品推荐
相关产品推荐

