请求优化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);
关键改动说明
- 数组初始化移到循环外:确保所有查询到的行都被收集到同一个
$status数组中,不会被循环清空 - 统一输出JSON:只在循环结束后执行一次
echo json_encode($response),返回单一的JSON对象 - 添加参数化查询:用
?占位符和参数数组传递MobileNo,彻底避免SQL注入攻击 - 完善无数据处理:增加了没有查询到数据时的响应逻辑,让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
相关产品推荐
相关产品推荐

