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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:16:13