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

PHP Mysqli读取数据库对象数组转JSON:仅获最后一条数据的解决办法

解决PHP查询结果仅保留最后一条记录的问题

我来帮你搞定这个问题!你遇到的问题根源很明确——每次循环都重新创建了$event_details对象,导致之前的记录被完全覆盖,最后只留下最后一条数据。咱们来一步步修改代码,保留你想要的JSON格式同时获取所有记录:

核心修改思路

  1. 提前初始化容器对象:在循环开始前就创建好存储所有记录的容器,避免每次循环覆盖之前的数据。
  2. 循环内仅追加当前记录:每次循环只针对当前guid创建子对象并填充数据,将其添加到容器中。
  3. 匹配预期的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:22:54