使用echo json_encode仅返回数组最后一个值是否正常?
问题分析与解决思路
嘿,这个问题我碰到过好几次,大概率是你没正确把所有查询结果收集到数组里,而不是数据库真的只返回了1条记录。下面给你一步步拆解原因和验证方法:
最常见的错误写法
很多人会在循环里直接覆盖变量,而不是把每条记录追加到数组里:
// 错误示例:每次循环都覆盖$data,最后只剩最后一条 $result = mysqli_query($conn, "SELECT * FROM your_table"); $data = []; while ($row = mysqli_fetch_assoc($result)) { $data = $row; // 这里是赋值,不是追加! } echo json_encode($data);
正确的做法是用[]把每行数据追加到数组末尾:
// 正确示例:收集所有记录到数组 $result = mysqli_query($conn, "SELECT * FROM your_table"); $data = []; while ($row = mysqli_fetch_assoc($result)) { $data[] = $row; // 追加当前行到数组 } echo json_encode($data);
验证数据库是否真的返回8条记录
你可以先打印查询结果的总数和每条数据,确认问题出在哪:
$result = mysqli_query($conn, "SELECT * FROM your_table"); // 先看查询到的总记录数 echo "数据库返回的记录数:" . mysqli_num_rows($result) . "<br>"; // 遍历打印每条记录 while ($row = mysqli_fetch_assoc($result)) { print_r($row); echo "<br>"; }
如果mysqli_num_rows($result)输出8,说明数据库确实查到了8条,那就是你收集数据的方式错了;如果输出1,那就要检查你的SQL语句是不是加了LIMIT 1,或者where条件过滤掉了其他7条记录。
额外小提示
- 如果你用的是PDO,逻辑也是一样的:别直接赋值,要用
$data[] = $row来追加记录 - 如果
json_encode输出异常,可以用json_last_error()查看编码是否失败(比如特殊字符、中文编码问题都可能导致这种情况)
内容的提问来源于stack exchange,提问作者Someone
相关产品推荐
相关产品推荐

