我有一个大型文本文件,其中包含需要在数据库中导入的数据行。但该文件包含300000行,我无法使其工作,因为查询似乎太大了。
$all_inserts = array();
$count = 0;
foreach($file as $line) {
if($count > 0) {
$modelnummer = trim(substr($line, 0, 4));
$datum = trim(substr($line, 4, 8));
$acc_nummer = trim(substr($line, 12, 4));
$acc_volgnr = trim(substr($line, 16, 1));
$prijs = trim(substr($line, 17,5));
$mutatiecode = trim(substr($line, 22,1));
$all_inserts[] = array($modelnummer, $datum, $acc_nummer, $acc_volgnr, $prijs, $this->quote($mutatiecode));
}
$count++;
}
$query = 'INSERT INTO accessoire_model_brommer (modelnummer, datum, acc_nummer, acc_volgnr, prijs, mutatiecode) VALUES ';
$rows = array();
foreach($all_inserts as $one_insert) {
$rows[] = '(' . implode(',', $one_insert) . ')';
}
$query .= ' ' . implode(',', $rows);
$db->query($query);
我将上面的代码用于较小的文件,它工作得很好而且速度很快。但它不适用于较大的文件。有人知道更好的阅读和插入此文件的方法吗?
还尝试在事务中每行使用一个insert语句,但它也不起作用。
答案 0 :(得分:1)
注意:我不知道PDO或SQL对查询长度的确切限制
如果查询看起来太大,也许你可以拼接文本文件,所以不要运行300个值为300k的查询,而是运行100个3000值的查询,即。?
也许你可以创建一个缓冲区,用3000个值填充它并运行查询。清空缓冲区,用下一个3000值填充它并再次运行查询。