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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:09:41