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

如何通过MySQL存储过程将PHP传递的数组数据批量插入多行

方案实现(基于MySQL 5.7+ 支持JSON的主流版本)

第一步:修改PHP端代码

原有代码直接传入PHP数组打印字符串的方式不可行,需要将数组转为MySQL可识别的JSON格式,同时使用预处理语句规避SQL注入风险:

<?php
$conn = new mysqli("localhost","root","","company");
// 连接异常校验
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// 定义实际业务数组
$array_item = [
    [
        "user_name" => "VANITHA",
        "adddress" => "",
        "mobile_no" => "8877665544"
    ],
    [
        "user_name" => "VANITHA1",
        "adddress" => "rere",
        "mobile_no" => "8877665544"
    ]
];

// 数组转JSON字符串
$json_data = json_encode($array_item, JSON_UNESCAPED_UNICODE);

// 预处理调用存储过程
$stmt = $conn->prepare("CALL addnew(?)");
$stmt->bind_param("s", $json_data);
$stmt->execute();

$stmt->close();
$conn->close();
?>

第二步:修改MySQL存储过程

存储过程需要接收JSON参数,解析数组后循环插入每一行数据:

DELIMITER //
CREATE PROCEDURE addnew(IN ArrayDemo JSON)
BEGIN  
    DECLARE i INT DEFAULT 0;
    DECLARE data_count INT DEFAULT JSON_LENGTH(ArrayDemo);
    -- 遍历JSON数组的每一条数据
    WHILE i < data_count DO
        INSERT INTO geektable (user_name, adddress, mobile_no) 
        VALUES (
            JSON_UNQUOTE(JSON_EXTRACT(ArrayDemo, CONCAT('$[', i, '].user_name'))),
            JSON_UNQUOTE(JSON_EXTRACT(ArrayDemo, CONCAT('$[', i, '].adddress'))),
            JSON_UNQUOTE(JSON_EXTRACT(ArrayDemo, CONCAT('$[', i, '].mobile_no')))
        );
        SET i = i + 1;
    END WHILE;
END //
DELIMITER ;

注意说明

  • 如果使用的是5.7以下不支持JSON的MySQL版本,可以将PHP数组转为指定分隔符的字符串,存储过程内通过SUBSTRING_INDEX拆分后循环插入
  • 示例中保留了你原有代码的字段名adddress(两个d),请确认和实际表结构的字段名一致
  • 如果单批插入数据量超过100条,更推荐直接在PHP端拼接批量INSERT语句执行,性能优于存储过程循环插入

内容的提问来源于stack exchange,提问作者Rajesh Mandal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:45:11