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

我有成千上万的数据通过巨大的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);

}

标签:load-data-infile,mysql,php

来源: https://codeday.me/bug/20191210/2102783.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值