PHP Mysqli读取数据库对象数组转JSON:仅获最后一条数据的解决办法
解决PHP查询结果仅保留最后一条记录的问题
我来帮你搞定这个问题!你遇到的问题根源很明确——每次循环都重新创建了$event_details对象,导致之前的记录被完全覆盖,最后只留下最后一条数据。咱们来一步步修改代码,保留你想要的JSON格式同时获取所有记录:
核心修改思路
- 提前初始化容器对象:在循环开始前就创建好存储所有记录的容器,避免每次循环覆盖之前的数据。
- 循环内仅追加当前记录:每次循环只针对当前
guid创建子对象并填充数据,将其添加到容器中。 - 匹配预期的JSON结构:最后把所有记录包装到
data键下,和你给出的示例格式一致。
修改后的完整代码
$query = "SELECT guid, name, location, description, datetime FROM event"; $result = doSQLTermError($db_connect, $query); // 初始化空对象作为所有event记录的容器 $event_details = new stdClass; while($obj = mysqli_fetch_object($result)){ $guid = $obj->guid; // 只为当前guid创建子对象,不覆盖整个容器 $event_details->$guid = new stdClass; $event_details->$guid->name = $obj->name; $event_details->$guid->location = $obj->location; $event_details->$guid->description = $obj->description; $event_details->$guid->datetime = $obj->datetime; } // 包装成你需要的外层带data的结构 $event_data = new stdClass; $event_data->data = $event_details; $event = json_encode($event_data);
代码说明
- 把
$event_details = new stdClass;移到循环外后,这个对象会持续存在,每次循环只是给它新增一个以guid为键的属性,存储对应事件的详情。 - 循环内不再重新赋值
$event_details,因此之前的记录不会被覆盖,所有查询到的事件都会被保留下来。 - 最后通过
$event_data对象包装$event_details,确保json_encode后生成的JSON包含外层的data键,完全匹配你预期的格式。
内容的提问来源于stack exchange,提问作者Shh
相关产品推荐
相关产品推荐

