一、前言
针对数据插入操作,通常我们使用 SQL 语句在 MySQL 数据库中执行 INSERT INTO 语句,实现数据插入。对于单条数据插入,我们通常使用 PHP 的 mysqli 或 PDO 等扩展进行操作。但如果需要一次性向数据库插入多条数据时,循环多次插入会导致性能问题,这时我们可以使用PHP的 array_chunk 函数和 mysqli 或 PDO 的批量插入操作完成对大量数据的快速插入。
二、使用mysqli扩展批量插入数据
使用mysqli扩展进行批量插入的主要步骤:
- 创建mysqli对象;
- 准备要插入的数据,并使用array_chunk函数按照指定大小进行拆分;
- 使用beginTransaction函数开始事务;
- 循环插入数据,使用prepare函数,绑定参数,执行处理执行语句;
- 使用commit函数提交事务;
- 关闭连接。
<?php
// 创建mysqli对象
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
// 要插入的数据
$data = array(
array('name1', 'age1', 'address1'),
array('name2', 'age2', 'address2'),
array('name3', 'age3', 'address3'),
//...
);
// 拆分数据
$data_chunk = array_chunk($data, 1000);
// 开启事务
$mysqli->begin_transaction();
// 插入数据
foreach ($data_chunk as $chunk) {
$stmt = $mysqli->prepare("INSERT INTO `table`(`name`, `age`, `address`) VALUES (?, ?, ?)");
foreach ($chunk as $row) {
$stmt->bind_param('sss', $row[0], $row[1], $row[2]);
$stmt->execute();
}
$stmt->close();
}
// 提交事务
$mysqli->commit();
// 关闭连接
$mysqli->close();
以上是使用mysqli扩展进行批量插入数据的示例代码。
三、使用PDO扩展批量插入数据
使用PDO扩展进行批量插入的主要步骤:
- 创建PDO对象;
- 设置错误模式为异常模式;
- 准备要插入的数据,并使用array_chunk函数按照指定大小进行拆分;
- 使用beginTransaction函数开始事务;
- 循环插入数据,使用prepare函数,绑定参数,执行处理执行语句;
- 使用commit函数提交事务;
- 关闭连接。
<?php
// 创建PDO对象
$pdo = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');
// 设置错误模式为异常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 要插入的数据
$data = array(
array('name1', 'age1', 'address1'),
array('name2', 'age2', 'address2'),
array('name3', 'age3', 'address3'),
//...
);
// 拆分数据
$data_chunk = array_chunk($data, 1000);
// 开启事务
$pdo->beginTransaction();
// 插入数据
foreach ($data_chunk as $chunk) {
$stmt = $pdo->prepare("INSERT INTO `table`(`name`, `age`, `address`) VALUES (?, ?, ?)");
foreach ($chunk as $row) {
$stmt->bindParam(1, $row[0]);
$stmt->bindParam(2, $row[1]);
$stmt->bindParam(3, $row[2]);
$stmt->execute();
}
}
// 提交事务
$pdo->commit();
// 关闭连接
$pdo = null;
以上是使用PDO扩展进行批量插入数据的示例代码。
四、结语
以上是针对如何使用PHP扩展实现MySQL批量插入多条数据的介绍。在线上系统中操作大量数据时,尽可能使用批量插入的方式,是提高性能的一个重要措施。同时,需要注意参数绑定和SQL注入等安全问题。