-1

PHP初心者です。大量のアイテムをデータベースに挿入しようとしています。forループとmysqli_queryコマンドを使用しています。

私の疑似コードは次のようなものです:

for ($i=0; $i<50000; $i++) {
  mysqli_query($con, "INSERT INTO users (name, age) VALUES ('$name','$age'); ") ;

}

私は自分のコードを数百回ループさせてから、poof: Fatal error : Maximum execution time of 30 seconds exceeded in xxx on line xxx を実行しました。

私にとって唯一の解決策は、ループが中断した後にカウンターを手動でインクリメントすることです。

他の解決策はありますか?助けてください!

4

3 に答える 3

5

一度にすべてのレコードに対してクエリを実行しないでください。1 つのステートメントで複数の挿入を行うことができます。以下の例では、一度に 50 個実行します。おそらく、これを 100 または 500 まで安全に増やすことができます。

$counter = 0;
$query = 'INSERT INTO users (name, age) VALUES ';
for ($i=0; $i<50000; $i++) {
  $counter++;
  $sql .= "('$name','$age'),"; 
  // execute query every 50 records
  if ($counter % 50 === 0) {
      $sql = rtrim($sql, ',');
      mysqli_query($con, $query . $sql) ;
      $sql = '';
  }
}
于 2014-09-25T13:15:22.190 に答える
0

トライキャッチを投げる

for ($i=0; $i<50000; $i++) {
  try {
    mysqli_query($con, "INSERT INTO users (name, age) VALUES ('$name','$age'); ") ;
  } catch ($e) {
    // You can log $e here if you want
    // It would also probably be good to print out your query 
    // so you can go back and try it again later
  }

}
于 2014-09-25T13:14:39.643 に答える