使用CodeIgniter API从Postman批量插入JSON到MySQL遇500错误求助
批量插入/更新数据的解决方案
问题分析
当前代码存在几个关键问题导致批量提交失败:
- 仅处理单条数据:
getVar()只能获取单个字段值,无法解析提交的JSON数组 - 更新语法错误:
$model->update->where()写法错误,不符合CodeIgniter的查询语法 - 字段名不统一:提交的JSON中一条是
total_distributor,另一条是total_distributors,与代码中使用的字段名不一致 - 无批量处理逻辑:没有循环遍历提交的多条数据
修正后的代码
public function create() { $model = new AdminModel(); // 获取提交的JSON数组,转为关联数组 $requestData = $this->request->getJSON(true); if (empty($requestData)) { return $this->respond([ 'status' => 400, 'error' => 'Empty data submitted', 'messages' => [ 'error' => 'No data provided for insertion' ] ], 400); } $successCount = 0; $errorCount = 0; foreach ($requestData as $item) { // 统一字段名,兼容提交数据中的拼写差异 $data = [ 'total_sales' => $item['total_sales'] ?? null, 'total_product' => $item['total_product'] ?? null, 'total_profit' => $item['total_profit'] ?? null, 'total_distributors' => $item['total_distributors'] ?? $item['total_distributor'] ?? null, 'total_ratail' => $item['total_ratail'] ?? null ]; // 检查必填字段(根据实际需求调整) $requiredFields = ['total_sales', 'total_product']; $missingFields = array_filter($requiredFields, fn($field) => empty($data[$field])); if (!empty($missingFields)) { $errorCount++; continue; } // 检查数据是否存在(假设用total_sales作为唯一标识,需根据实际主键调整) $existing = $model->where('total_sales', $data['total_sales'])->first(); if ($existing) { // 更新数据 $updateSuccess = $model->update($existing['id'], $data); $updateSuccess ? $successCount++ : $errorCount++; } else { // 插入数据 $insertSuccess = $model->insert($data); $insertSuccess ? $successCount++ : $errorCount++; } } $response = [ 'status' => 200, 'error' => null, 'messages' => [ 'success' => "成功处理{$successCount}条记录,{$errorCount}条记录失败" ] ]; return $this->respondCreated($response); }
关键改进说明
- 解析JSON数组:用
getJSON(true)将提交的JSON转为PHP关联数组,支持多条数据的遍历处理 - 字段兼容处理:自动适配提交数据中
total_distributor和total_distributors的拼写差异,避免字段映射错误 - 循环处理每条数据:遍历数组中的每一项,分别执行存在性检查、更新或插入操作
- 错误统计:返回成功和失败的记录数,便于排查问题
- 修正更新语法:使用CodeIgniter模型标准的
update($id, $data)写法,解决原代码的语法错误
Postman提交注意事项
- 确保请求头设置
Content-Type: application/json - 提交的JSON数据建议统一字段名(推荐都用
total_distributors,与数据库字段保持一致)
内容的提问来源于stack exchange,提问作者KnightSky
相关产品推荐
相关产品推荐

