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

PHP $_GET获取MySQL数据生成JSON格式不符问题求助

解决PHP生成JSON格式不符合预期的问题

嘿,我看了你的问题和代码,马上就能发现问题出在哪了——完全是PHP代码里的数组构建逻辑不对,和数据库表结构没关系!

你期望的JSON结构是包含oid字段,以及一个名为comments的数组,但你的当前代码只把查询到的评论数据存进了数组,直接编码输出,既没加oid,也没把评论放到comments键下面,所以才会生成带数字索引的对象(或者数组,取决于PHP对索引的判断)。

修正后的代码

首先我们需要构建一个符合预期结构的关联数组,再编码成JSON:

// 初始化最终要返回的数组,包含oid和空的comments数组
$response = [
    'oid' => $oid,
    'comments' => []
];

// 查询对应oid的评论数据
$result = $conn->query("SELECT name, comment FROM objects WHERE oid='$oid'");
while($row = $result->fetch_assoc()) {
    // 把每条评论添加到comments数组中
    $response['comments'][] = $row;
}

// 输出格式化后的JSON,注意用JSON常量而不是true
echo json_encode($response, JSON_PRETTY_PRINT);

额外注意事项

  1. SQL注入风险:你直接把$oid拼接到SQL语句里的做法非常危险,容易被注入攻击,建议改用预处理语句:
// 预处理语句示例,更安全
$stmt = $conn->prepare("SELECT name, comment FROM objects WHERE oid=?");
$stmt->bind_param("s", $oid); // "s"表示参数是字符串类型
$stmt->execute();
$result = $stmt->get_result();

$response = [
    'oid' => $oid,
    'comments' => []
];

while($row = $result->fetch_assoc()) {
    $response['comments'][] = $row;
}

echo json_encode($response, JSON_PRETTY_PRINT);
  1. json_encode参数问题:你之前用的json_encode($json_array, true)里的true是错误用法,第二个参数应该是PHP的JSON常量,比如JSON_PRETTY_PRINT用于格式化输出,JSON_UNESCAPED_UNICODE用于保留中文不转义等。

这样修改后,输出的JSON就会完全符合你期望的格式啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:08:14