gpt4 book ai didi

php - 使用php批量插入数据到MySQL数据库

转载 作者:可可西里 更新时间:2023-11-01 08:23:10 27 4
gpt4 key购买 nike

我使用 PHP 和 MySQL 从庞大的 XML 中解析出数千个数据,并将其插入到数据库表中。我的问题是将所有数据插入表中花费的时间太长。有没有办法将我的数据分成更小的组,以便按组进行插入过程?例如,如何设置一个脚本来处理 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)

所以你减少了要运行的句子总数。

编辑:根据您的代码片段,您似乎可以从 INSERT ... ON DUPLICATE KEY UPDATE 中受益MySQL 的语法,让数据库完成工作并减少查询量。这假定您的表具有主键或唯一索引。

要每 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);
}

关于php - 使用php批量插入数据到MySQL数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1042461/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com