php实现大批量入库实战

      发布在:后端技术      评论:0 条评论

php实现大批量入库实战,前几年写的,现在看看也是有参考价值的,这块也考虑到了数据重复的处理方式

  $file = fopen('.'.$upload_result['data'][0]['url'], "r");
$aid=session(C('USER_AUTH_KEY'));
//输出文本中所有的行,直到文件结束为止。
           $k=0;
$ins_str='';
while(! feof($file))
{
$vo= fgets($file);//fgets()函数从文件指针中读取一行
               $v=explode('-',$vo);
if(!empty($v[0])){
$prod['title'] = trim($v[0]);
//15是父栏目
                   if($cid==15){
$cid=strlen($prod['title'])-4;
$cid=min($cid,6);
}
//2064897854-40-350
                   $prod['price'] = intval(trim($v[2]));
$prod['level'] = intval(trim($v[1]));
$prod['mibao'] = intval(trim($mibao));
$prod['isvip'] = intval(trim($isvip));
$prod['cid'] = trim($cid);
$prod['status'] = 1;
$prod['publishtime'] = time();
$prod['updatetime'] = time();
$prod['addtime'] = date("Y-m-d H:i:s",time());
$prod['aid'] = $aid;
$prod['filename'] = $filename;
//insert into __YMPRODUCT__ (title,price,level,mibao,isvip,cid,status,publishtime,updatetime,addtime,aid,filename) values ($prod['title'],$prod['price'],$prod['level'],$prod['mibao'],$prod['isvip'],$prod['cid'],$prod['status'],$prod['publishtime'],$prod['updatetime'],$prod['addtime'],$prod['aid'],$prod['filename']) on duplicate key update price=values(price);
                   $k++;
if($ins_str != ''){
$ins_str.=',';
}
$ins_str.="('{$prod['title']}','{$prod['price']}','{$prod['level']}','{$prod['mibao']}','{$prod['isvip']}','{$prod['cid']}','{$prod['status']}','{$prod['publishtime']}','{$prod['updatetime']}','{$prod['addtime']}','{$prod['aid']}','{$prod['filename']}')";
if($k>1000){
//                        sql拼接长度受max_allowed_packet的值影响,值越大可拼接长度可越长,当然一次性可插入的数据就越大(个人未验证,但sql语句的最大长度肯定说sql数据库配置的影响)
                       $sql='insert into __PRODUCT__ (title,price,level,mibao,isvip,cid,status,publishtime,updatetime,addtime,aid,filename) values '.$ins_str.' on duplicate key update price=IF(price < VALUES(price), VALUES(price), price)';
$Mprod->execute($sql);
$ins_str='';
$k=0;
}


}

}
fclose($file);
if($ins_str != ''){
$sql='insert into __PRODUCT__ (title,price,level,mibao,isvip,cid,status,publishtime,updatetime,addtime,aid,filename) values '.$ins_str.' on duplicate key update price=IF(price < VALUES(price), VALUES(price), price)';
$Mprod->execute($sql);
}
exit('{"error":0,"info":"入库成功"}');


相关文章
热门推荐