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

PHP如何解析JSON数据并将其写入MySQL数据库?

解析JSON并插入MySQL的正确方法

我来帮你一步步排查代码问题并给出完整的解决方案,你的需求是把前端发送的JSON数据解析后,将子分类ID批量插入MySQL数据库,咱们先看原代码里的几个关键错误:

原代码的问题点

  • 变量名混淆:你把解析后的JSON数据存在$reps_list变量里,但循环时却用了未定义的$array,导致无法读取数据
  • 循环边界错误:使用$i <= count(...)会导致数组越界,比如数组有3个元素(索引0、1、2),count返回3,循环会执行到$i=3,而数组没有这个索引,直接报错
  • 语法错误:数组索引[i]缺少$符号,正确写法是[$i]
  • SQL注入风险:直接把变量拼接进SQL语句,这是非常危险的做法,容易被恶意攻击
  • 可能的JSON接收方式错误:如果前端是直接发送raw JSON请求体,而非将JSON字符串放在表单字段中,$_POST['reps_list']是无法获取到数据的

正确的实现步骤及代码

第一步:正确接收JSON数据

首先要根据前端的发送方式选择对应的接收方法:

// 情况1:前端通过表单的reps_list字段传递JSON字符串
if (isset($_POST['reps_list'])) {
    $json_content = $_POST['reps_list'];
} else {
    // 情况2:前端发送的是raw JSON请求体(更常见的JSON发送方式)
    $json_content = file_get_contents('php://input');
}

第二步:解析并验证JSON数据

解析后要检查是否解析成功,同时验证数据结构是否符合预期:

// 解析JSON为关联数组
$parsed_data = json_decode($json_content, true);

// 检查解析是否成功
if (json_last_error() !== JSON_ERROR_NONE) {
    die('JSON解析失败:' . json_last_error_msg());
}

// 验证是否存在需要的字段且为数组
if (!isset($parsed_data['reps_list']['selected_subcategory_id']) || !is_array($parsed_data['reps_list']['selected_subcategory_id'])) {
    die('数据格式错误:缺少有效的selected_subcategory_id数组');
}

// 提取需要的子分类ID数组
$subcategory_ids = $parsed_data['reps_list']['selected_subcategory_id'];

第三步:用预处理语句批量插入数据

使用MySQLi预处理语句可以避免SQL注入,同时提升批量插入的效率:

// 假设你的reps表结构包含id(自增)和subcategory_id字段
// 创建预处理语句
$stmt = mysqli_prepare($conn, "INSERT INTO reps (subcategory_id) VALUES (?)");
if (!$stmt) {
    die('预处理语句创建失败:' . mysqli_error($conn));
}

// 绑定参数:"i"表示参数为整型
mysqli_stmt_bind_param($stmt, "i", $current_id);

// 循环插入每个ID
$insert_count = 0;
foreach ($subcategory_ids as $current_id) {
    // 可选:验证ID是否为有效整数,过滤无效数据
    if (!is_int($current_id) || $current_id < 0) {
        continue;
    }
    // 执行插入
    if (mysqli_stmt_execute($stmt)) {
        $insert_count++;
    }
}

// 清理资源
mysqli_stmt_close($stmt);
mysqli_close($conn);

echo "数据插入完成,成功插入{$insert_count}条有效记录";

额外注意事项

  • 确保你的MySQL连接$conn已经正确建立(比如通过mysqli_connect())
  • 如果reps表有其他必填字段,需要在INSERT语句中补充对应的字段和参数
  • 建议添加错误处理逻辑,比如捕获插入失败的情况并记录日志

内容的提问来源于stack exchange,提问作者Giorgi Asaturyan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:11:26