首页后端开发PHPphp在mysql里批量插入数据(代码实例)

php在mysql里批量插入数据(代码实例)

时间2024-02-02 00:44:03发布访客分类PHP浏览422
导读:收集整理的这篇文章主要介绍了php在mysql里批量插入数据(代码实例),觉得挺不错的,现在分享给大家,也给大家做个参考。假如说我有这样一个表,我想往这个表里面插入大量数据CREATE TABLE IF NOT EXISTS `user_i...
收集整理的这篇文章主要介绍了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循环插入耗费的时间:条数时间(单位:秒)

方法二、使用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 . "br>
    " . $conn->
    error;
}
}
    $costEnd = microtime(true);
    $cost = round($costEnd - $costBegin, 3);
    VAR_dump($cost);
    $conn->
    close();
    

下面看一下少量数据与大量数据的时间对比。从总体时间上,可以看出insert合并插入比刚才for循环插入节约了很多时间,效果很明显条数时间(单位:秒)

如果你觉得数组太大,想要减少sql错误的风险,也可以使用array_chunk将数组切成指定大小的块,然后对每个块进行insert合并插入.

更多php相关知识,请访问php教程!

以上就是php在mysql里批量插入数据(代码实例)的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: php在mysql里批量插入数据(代码实例)
本文地址: https://pptw.com/jishu/596136.html
详解php soap实现web service接口服务 Docker+LNMP+Jenkins+码云实现 PHP 代码自动化部署

游客 回复需填写必要信息