2017-10-24 8 views
1

データベースにインポートする必要があるデータの行を持つ大きなテキストファイルがあります。しかし、このファイルには300000行のようなものが含まれており、クエリが大きすぎると思われるため、動作させることができません。PDO大きな挿入ステートメント

$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); 

私は小さなファイルのコードの上に使用し、それが正常にかつ高速に動作します。しかし、それは大きなファイルでは機能しません。誰かがこのファイルを読み込んで挿入するより良い方法を知っていますか?

また、トランザクション内で行ごとに挿入文を使用しようとしましたが、どちらも機能しません。

+0

クエリがあまりにも大きく見えるので、動作しません._十分に具体的ではありません。なぜそれは機能しませんか?何が起こるのですか?エラーが出ますか?いくつかの要素が挿入されますか? – OptimusCrime

答えて

1

注:クエリが大きすぎるようであれば、私はおそらくあなたがテキストファイルをアップスプライス、その代わりに300Kで1つのクエリを実行することができ、クエリの長​​さ

ためのPDOまたはSQLの正確な限界を知りません値は、3000の値で100のクエリを実行します。

おそらく、バッファを作成し、それに3000の値を入力してクエリを実行できます。バッファを空にし、次の3000の値を入力して、クエリを再度実行します。

+0

ありがとうございます。私はそれを一度に5000のように分割して、今は動作します。 –

関連する問題