PHP PDO查询单条记录如何返回单个对象而非对象数组JSON响应
问题原因
你当前代码使用PDO::fetchAll(PDO::FETCH_ASSOC)方法获取查询结果,这个方法会将所有匹配条件的记录打包为二维数组返回,即使查询结果只有1条,外层也会包裹一层索引数组,最终JSON序列化后message字段就会呈现为数组格式。
调整方案
两种常用改法任选其一即可:
方案1:改用fetch()获取单条记录(推荐,适用于确定查询结果最多1条的场景)
fetch()方法只会返回结果集的第一行数据,返回值是一维关联数组,序列化后就是你需要的对象格式,修改后完整代码如下:
<?php header('Content-Type: application/json'); include "db.php"; $uid = 1; $stmt = $db->prepare("SELECT * FROM transaction WHERE isAdmin = ?"); $stmt->execute([$uid]); // 替换fetchAll为fetch,仅获取结果集第一行 $result = $stmt->fetch(PDO::FETCH_ASSOC); echo json_encode( [ 'status' =>'success', 'message' => $result, ]);
方案2:从fetchAll结果中提取首条记录
如果你后续逻辑还需要用到全部查询结果,仅当前接口需要返回单条结构,可以直接读取结果数组的第0个元素:
<?php header('Content-Type: application/json'); include "db.php"; $uid = 1; $stmt = $db->prepare("SELECT * FROM transaction WHERE isAdmin = ?"); $stmt->execute([$uid]); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); echo json_encode( [ 'status' =>'success', // 取结果集第一条作为message值,加空兼容避免无结果时报下标不存在错误 'message' => $result[0] ?? [], ]);
效果验证
调整后返回的JSON结构会和预期完全一致:
{ "status": "success", "message": { "s_n": "1", "email": "seeme@mail.com", "info": "Good morning", "isAdmin": "1" } }
内容的提问来源于stack exchange,提问作者Ayra
相关产品推荐
相关产品推荐

