PHP往MySQL中插入大批量数据

使用 INSERT 语句合并插入

MySQL里面是可以使用insert语句进行合并插入的,比如:
INSERT INTO user_info (name, age) VALUES ('name1', 18), ('name2', 19);

表示一次插入两条数据.

实际操作:

1. 连接数据库

<?php

#########################
### PDO连接MySQL数据库 ###
#########################
$pdo = new PDO('mysql:host=localhost;dbname=www_ooo_net', 'www_ooo_net', 'www_ooo_net');
$pdo->exec('set names utf8');
// 数据
$arr = array(
    array(
        'name' => 'zhao',
        'age' => '14'
    ),
    array(
        'name' => 'qian',
        'age' => '15'
    ),
    array(
        'name' => 'sun',
        'age' => '16'
    ),
    array(
        'name' => 'li',
        'age' => '17'
    ),
    array(
        'name' => 'zhou',
        'age' => '18'
    ),
    array(
        'name' => 'wu',
        'age' => '19'
    ),
    array(
        'name' => 'zheng',
        'age' => '20'
    ),
    array(
        'name' => 'wang',
        'age' => '21'
    ),
    array(
        'name' => 'feng',
        'age' => '22'
    ),
    array(
        'name' => 'chen',
        'age' => '23'
    ),
);

2. 执行流程

<?php

$costBegin = microtime(true);

if (!empty($arr)) {
    $sql = sprintf("INSERT INTO wdce (name, age) VALUES ");
    foreach ($arr as $item) {
        $itemStr = '( ';
        $itemStr .= sprintf("'%s', %d", $item['name'], (int)$item['age']);
        $itemStr .= '),';
        $sql .= $itemStr;
    }
    // 去除最后一个逗号,并且加上结束分号
    $sql = rtrim($sql, ',');
    $sql .= ';';
    try {
        // 成功返回结果条数
        $res = $pdo->exec($sql);
        if (!empty($res)) {
            echo '<pre>';
            var_dump('成功插入' . $res . '条数据');
            // 插入成功后返回插入数据的ID
            var_dump($pdo->lastinsertid());
        } else {
            echo "Error: " . $sql . "<br>" . $pdo->error;
        }
    } catch (Exception $e) {
        $pdo->rollBack();
        echo "插入失败: " . $e->getMessage();
    }
}

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

<?php

foreach ($new_arr as $k => $v) {

    $sqls = sprintf("INSERT INTO wdce (name, age) VALUES ");

    foreach ($v as $items) {
        $itemStrs = '( ';
        $itemStrs .= sprintf("'%s', %d", $items['name'], (int)$items['age']);
        $itemStrs .= '),';
        $sqls .= $itemStrs;
    }

    // 去除最后一个逗号,并且加上结束分号
    $sqls = rtrim($sqls, ',');
    $sqls .= ';';

    try {

        // 成功返回结果条数
        $res = $pdo->exec($sqls);

        if (!empty($res)) {

            echo '<pre>';
            var_dump('成功插入' . $res . '条数据');

        } else {
            echo "Error: " . $sqls . "<br>" . $pdo->error;
        }
    } catch (Exception $e) {
        $pdo->rollBack();
        echo "插入失败: " . $e->getMessage();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值