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

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

发布时间:2022-10-29 16:09:34 所属栏目:MySql教程 来源:
导读:  我有成千上万的数据通过巨大的XML解析,可以使用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);
 
  }
 
  
 

(编辑:均轻资讯网)

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