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

如何使用PHP向MySQL表中执行单次查询批量插入多行数据

PHP 单次查询批量插入MySQL多行数据实现方案

MySQL原生支持单条INSERT语句插入多行数据,你只需要拼接对应的VALUES段即可,以下是两种主流PHP数据库扩展的实现方式,操作后生成的表数据和你给出的目标结果完全一致:
首先假设你操作的表名为user_messages,字段对应为user_id(int类型)、Message(varchar类型)、Date(varchar/date类型)、Subject(varchar类型)。

1. 使用mysqli扩展实现

固定值插入版本

适合插入数据是固定值的场景:

<?php
// 替换为你自己的数据库连接配置
$host = '127.0.0.1';
$dbname = 'your_database';
$username = 'your_username';
$password = 'your_password';

// 建立连接
$conn = new mysqli($host, $username, $password, $dbname);
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// 单条INSERT批量插入多行的SQL语句
$sql = "INSERT INTO user_messages (user_id, Message, Date, Subject)
VALUES 
(1243, 'Hello world!', '06.04.2021', 'First Message'),
(5265, 'Hi John!', '07.04.2021', 'Second Message')";

if ($conn->query($sql) === TRUE) {
    echo "插入成功,共插入2条记录";
} else {
    echo "插入错误: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?>

预处理防注入版本

如果插入的数据来自用户输入,一定要用预处理语句避免SQL注入:

<?php
$conn = new mysqli($host, $username, $password, $dbname);
// 要插入的数据集,可动态扩展
$insertData = [
    [1243, 'Hello world!', '06.04.2021', 'First Message'],
    [5265, 'Hi John!', '07.04.2021', 'Second Message']
];
// 生成对应行数的占位符
$placeholders = rtrim(str_repeat('(?,?,?,?),', count($insertData)), ',');
$sql = "INSERT INTO user_messages (user_id, Message, Date, Subject) VALUES $placeholders";
// 绑定参数类型:i对应int,s对应string
$types = str_repeat('isss', count($insertData));
// 扁平化二维数组为一维参数列表
$params = [];
foreach ($insertData as $row) {
    foreach ($row as $val) {
        $params[] = $val;
    }
}
$stmt = $conn->prepare($sql);
$stmt->bind_param($types, ...$params);
$stmt->execute();
echo "成功插入".$stmt->affected_rows."行数据";
$stmt->close();
$conn->close();
?>

2. 使用PDO扩展实现

PDO支持跨数据库,预处理写法更简洁:

<?php
$host = '127.0.0.1';
$dbname = 'your_database';
$username = 'your_username';
$password = 'your_password';

try {
    $conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $insertData = [
        [1243, 'Hello world!', '06.04.2021', 'First Message'],
        [5265, 'Hi John!', '07.04.2021', 'Second Message']
    ];

    $placeholders = rtrim(str_repeat('(?,?,?,?),', count($insertData)), ',');
    $sql = "INSERT INTO user_messages (user_id, Message, Date, Subject) VALUES $placeholders";
    $stmt = $conn->prepare($sql);
    // 扁平化参数直接传入执行
    $params = [];
    foreach ($insertData as $row) {
        $params = array_merge($params, $row);
    }
    $stmt->execute($params);
    echo "成功插入".$stmt->rowCount()."行数据";
} catch(PDOException $e) {
    echo "插入错误: " . $e->getMessage();
}
$conn = null;
?>

注意:如果你的Date字段是MySQL的date类型,建议把日期格式转换成2021-04-06这种标准格式再插入,避免数据库识别出错,如果你确实需要存储06.04.2021格式的字符串,可以把字段设置为varchar类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:18:01