php - PDO 大插入语句

标签 php mysql pdo

我有一个大型文本文件,其中包含需要导入数据库的数据行。但是该文件包含大约 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/

相关文章:

javascript - 检测移动语法

mysql - 如何使用 Criteria Query JPA 从数据库表的最后一行开始选择结果?

php - 更新 PDO 中的多行 - 1 列更改

php - 使用 INNER JOIN 时绑定(bind)占位符变量的 PDO 异常问题

php - 学说 DBAL 2 : fetchAll() unnecessary array dimensions

php - PDO 插入成功但没有?

php - 我在 do_action 之前执行remove_action,但操作仍然被触发?

php - 速记PDO查询

mysql - 如何在数据库中存储打开的 ID?

php - Mysql选择最后添加的5个并使它们成为rand