php往mysql中批量插入数据实例教程
发布:smiling 来源: PHP粉丝网 添加日期:2021-11-02 10:35:49 浏览: 评论:0
这篇文章主要给大家介绍了关于php往mysql中批量插入数据的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
前言
假如说我有这样一个表,我想往这个表里面插入大量数据
- 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循环插入耗费的时间:
条数 时间 (单位:秒)
- 10 0.011
- 1000 0.585
- 10000 5.733
- 100000 60.587
方法二、使用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 (!emptyempty($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 . "<br>" . $conn->error;
- }
- }
- $costEnd = microtime(true);
- $cost = round($costEnd - $costBegin, 3);
- var_dump($cost);
- $conn->close();
下面看一下少量数据与大量数据的时间对比。从总体时间上,可以看出insert合并插入比刚才for循环插入节约了很多时间
条数 时间 (单位:秒)
- 10 0.006
- 1000 0.025
- 10000 0.131
- 100000 1.23
当然,如果你觉得数组太大,想要减少sql错误的风险,也可以使用array_chunk将数组切成指定大小的块,然后对每个块进行insert合并插入。
Tags: mysql批量插入
- 上一篇:php实现算术验证码功能
- 下一篇:php实现的PDO异常处理操作分析
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)