我有一个大型文本文件,其中包含需要导入数据库的数据行。但是该文件包含大约 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);
我将上面的代码用于较小的文件,它运行良好且速度很快。但它不适用于更大的文件。有人知道读取和插入此文件的更好方法吗?
还尝试在事务中每行使用插入语句,但它也不起作用。
最佳答案
注意:我不知道 PDO 或 SQL 对查询长度的确切限制
如果查询看起来太大,也许您可以拼接文本文件,而不是运行 1 个具有 300k 个值的查询,而是运行 100 个具有 3000 个值的查询,即?
也许您可以创建一个缓冲区,用 3000 个值填充它并运行查询。清空缓冲区,用接下来的 3000 个值填充它并再次运行查询。
关于php - PDO 大插入语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46907140/