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

请求优化PHP API响应:将多查询结果合并为单一数组列表

解决PHP API返回单一数组列表的问题

我来帮你搞定这个问题!当前代码的核心问题是每次循环都会重置数组并输出JSON,导致最终返回多个独立的JSON对象。咱们调整一下逻辑,就能得到包含所有状态数据的单一数组响应,同时还能补上SQL注入的安全漏洞。

原代码的问题分析

  • $status=array(); 放在while循环内部,每次循环都会清空数组,只能存储当前行的数据
  • echo json_encode($response); 放在循环内部,每循环一次就输出一次JSON,最终产生多个独立的JSON对象
  • 直接把$_POST['MobileNo']拼到SQL语句里,存在严重的SQL注入风险

修改后的完整代码

$MobileNo = $_POST['MobileNo'];
// 使用参数化查询避免SQL注入
$query = "SELECT * FROM tblLotProcessStatus WHERE MobileNo = ?";
$params = array($MobileNo);
$result = sqlsrv_query($pdo, $query, $params);

// 初始化状态数组(必须放在循环外面)
$status = array();
while ($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)) {
    // 将每一行数据添加到同一个数组中
    array_push($status, $row);
}

// 构建统一的响应结构
$response = array();
if (!empty($status)) {
    $response["responce_code"] = 200;
    $response["error_code"] = 0;
    $response["error_msg"] = "status available";
    $response["data"] = $status; // 把所有状态数据统一放到data字段里
} else {
    // 处理没有查询到数据的情况
    $response["responce_code"] = 404;
    $response["error_code"] = 1;
    $response["error_msg"] = "No status found";
    $response["data"] = array();
}

// 一次性输出完整的JSON响应
echo json_encode($response);

关键改动说明

  1. 数组初始化移到循环外:确保所有查询到的行都被收集到同一个$status数组中,不会被循环清空
  2. 统一输出JSON:只在循环结束后执行一次echo json_encode($response),返回单一的JSON对象
  3. 添加参数化查询:用?占位符和参数数组传递MobileNo,彻底避免SQL注入攻击
  4. 完善无数据处理:增加了没有查询到数据时的响应逻辑,让API的行为更严谨

修改后API返回的响应格式会是这样的单一JSON对象:

{
    "responce_code": 200,
    "error_code": 0,
    "error_msg": "status available",
    "data": [
        {"字段1": "值1", "字段2": "值2"},
        {"字段1": "值3", "字段2": "值4"}
    ]
}

内容的提问来源于stack exchange,提问作者Nency Kadia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:58:31