加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

使用php将数据批量插入MySQL数据库

发布时间:2021-01-20 14:07:26 所属栏目:编程 来源:网络整理
导读:我有成千上万的数据通过巨大的XML解析,可以使用PHP和MySQL插入数据库表中.我的问题是将所有数据插入表中花费的时间太长.有没有一种方法可以将我的数据分成较小的组,以便按组进行插入过程?例如,如何设置一个脚本来处理100个数据?这是我的代码: foreach($it

我有成千上万的数据通过巨大的XML解析,可以使用PHP和MySQL插入数据库表中.我的问题是将所有数据插入表中花费的时间太长.有没有一种方法可以将我的数据分成较小的组,以便按组进行插入过程?例如,如何设置一个脚本来处理100个数据?这是我的代码:

foreach($itemList as $key => $item){
     $download_records  = new DownloadRecords();
    //check first if the content exists
    if(!$download_records->selectRecordsFromCondition("WHERE Guid=".$guid."")){
         /* do an insert here */
    } else {
         /*do an update */
    }

}

*注:$itemList约为62,000,并且仍在增长.

最佳答案 使用for循环?

但是将数据加载到MySQL的最快选择是使用LOAD DATA INFILE命令,您可以创建文件以通过PHP加载,然后通过其他过程(或作为原始过程的最后一步)将其提供给MySQL.

如果无法使用文件,请使用以下语法:

insert into table(col1,col2) VALUES (val1,val2),(val3,val4),(val5,val6)

因此,您可以减少运行的句子总数.

编辑:给出您的摘录,似乎您可以从MySQL的INSERT … ON DUPLICATE KEY UPDATE语法中受益,让数据库完成工作并减少查询量.假设您的表具有主键或唯一索引.

要每100行访问一次数据库,您可以执行以下操作(请对其进行检查并修复为您的环境)

$insertOrUpdateStatement1 = "INSERT INTO table (col1,col2) VALUES ";
$insertOrUpdateStatement2 = "ON DUPLICATE KEY UPDATE ";
$counter = 0;
$queries = array();

foreach($itemList as $key => $item){
    $val1 = escape($item->col1); //escape is a function that will make 
                                 //the input safe from SQL injection. 
                                 //Depends on how are you accessing the DB

    $val2 = escape($item->col2);

    $queries[] = $insertOrUpdateStatement1. 
    "('$val1','$val2')".$insertOrUpdateStatement2.
    "col1 = '$val1',col2 = '$val2'";

    $counter++;

    if ($counter % 100 == 0) {
        executeQueries($queries);
        $queries = array();
        $counter = 0;
    }
}

然后executeQueries将获取该数组并发送一个多个查询:

function executeQueries($queries) {
   $data = "";
     foreach ($queries as $query) {
        $data.=$query.";n";
    }
    executeQuery($data);
}

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读