php+mysql实现大文件处理

大文件内容写入数据库

问题和困难mysql

1.文件太大,数据不能一次读取sql

2.数据存在冗余,因此不能单纯的插入操做数据库

解决ui

1.按行读取文件,计数累加,超过10000万行进行写库操做code

while ($str = fgetcsv($file)) { //每次读取CSV里面的一行内容
	$str = explode("	",$str[0]);
	$insert_data[] = array(
		'phone' => $str[0],
		'type' => $str[2],
		'number' => $str[3],
	);
	$time++;
	if ($time > 10000) {
		$value = "";
		$time = 0;
		foreach ($insert_data as $key => $item) {
			$value .= "(" . join(",",$item) ."),";
		}
		$value = trim($value,',');
		// var_dump($value);die;
		save($value,$mysqli);
		// die;
	}
}

2.写数据库操做,自动根据数据库内容进行选择插入仍是修改操做pdo

INSERT INTO flag_17_09 (`phone`,`type`,`number`) VALUES $value ON DUPLICATE KEY UPDATE number=number+VALUES(number)

若是主键存在,则更新,如不存在则执行插入操做,更新时将本次数据与原有数据相加保存get

其中,向MySQL写入大量数据时,能够考虑采用PDO模式it

ini_set('max_execution_time','0');
$pdo = new PDO("mysql:host=localhost;dbname=oradt_cloud1520","root","123456");

$sql = "insert into  scan_card_picture (uuid,account_id,handle_state,created_time,status,from_account,accuracy,ifupdate) values";

for($i=0; $i<100000; $i++){
  $str = strrand(32);
  $sql .="('".$str."','07:55:10','active','admin@qq.com','90',1),";
 }
$sql = substr($sql,0,strlen($sql)-1);
var_dump($sql);
if($pdo -> exec($sql)){
  echo "插入成功!";
  echo $pdo -> lastinsertid();
}
相关文章
相关标签/搜索