mysql中怎么使用php批量插入数据

61次阅读
没有评论

共计 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 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计2157字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)