共计 2157 个字符,预计需要花费 6 分钟才能阅读完成。
自动写代码机器人,免费开通
这篇文章将为大家详细讲解有关 mysql 中怎么使用 php 批量插入数据,文章内容质量较高,因此丸趣 TV 小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
假如说我有这样一个表,我想往这个表里面插入大量数据:
CREATE TABLE IF NOT EXISTS `user_info` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 自增主键 ,
`name` varchar(255) NOT NULL default COMMENT 姓名 ,
`age` int(11) NOT NULL default 0 COMMENT 年龄 ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT= 用户信息表
批量插入
方法一、使用 for 循环插入
在往 mysql 插入少量数据的时候,我们一般用 for 循环:
$arr = [
[
name = testname1 ,
age = 18,
],
[
name = testname2 ,
age = 19,
],
[
name = testname3 ,
age = 18,
],
];
$servername = localhost
$port = 3306;
$username = username
$password = password
$dbname = mytestdb
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname, $port);
// 检测连接
if ($conn- connect_error) {
die(connect failed: . $conn- connect_error);
}
$costBegin = microtime(true);
foreach($arr as $item) {
$sql = sprintf(INSERT INTO user_info (name, age) VALUES (%s , %d); , $item[name], (int)$item[age
if ($conn- query($sql) === TRUE) {
echo insert success
} else {
echo Error: . $sql . br . $conn- error;
}
}
$costEnd = microtime(true);
$cost = round($costEnd – $costBegin, 3);
var_dump($cost);
$conn- close();
假如说要批量插入大量数据,如果还用 for 循环的办法插入是没有问题的,只是时间会比较长。对比一下插入少量数据与插入大量数据,使用上面的 for 循环插入耗费的时间:条数时间 (单位:秒)。
方法二、使用 insert 语句合并插入
mysql 里面是可以使用 insert 语句进行合并插入的,比如:
INSERT INTO user_info (name, age) VALUES (name1 , 18), (name2 , 19); 表示一次插入两条数据
$arr = [
[
name = testname1 ,
age = 18,
],
[
name = testname2 ,
age = 19,
],
[
name = testname3 ,
age = 18,
],
// 此处省略
……
……
];
$servername = localhost
$port = 3306;
$username = username
$password = password
$dbname = mytestdb
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname, $port);
// 检测连接
if ($conn- connect_error) {
die(connect failed: . $conn- connect_error);
}
$costBegin = microtime(true);
if (!empty($arr)) {
$sql = sprintf(INSERT INTO user_info (name, age) VALUES
foreach($arr as $item) {
$itemStr = (
$itemStr .= sprintf(%s , %d , $item[ name], (int)$item[age
$itemStr .= ),
$sql .= $itemStr;
}
// 去除最后一个逗号,并且加上结束分号
$sql = rtrim($sql, ,
$sql .=
if ($conn- query($sql) === TRUE) {
} else {
echo Error: . $sql .
. $conn- error;
}
}
$costEnd = microtime(true);
$cost = round($costEnd – $costBegin, 3);
var_dump($cost);
$conn- close();
下面看一下少量数据与大量数据的时间对比。从总体时间上,可以看出 insert 合并插入比刚才 for 循环插入节约了很多时间, 效果很明显条数时间 (单位:秒)。
如果你觉得数组太大,想要减少 sql 错误的风险,也可以使用 array_chunk 将数组切成指定大小的块,然后对每个块进行 insert 合并插入。
关于 mysql 中怎么使用 php 批量插入数据就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
向 AI 问一下细节