为什么我的PHP循环每次都被破坏了?

时间:2014-09-25 13:10:52

标签: php loops for-loop time-limiting

我是PHP的初学者。我试图将大量的项目插入数据库。我正在使用for循环和mysqli_query命令。

我的伪代码是这样的:

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

}

我的代码工作了几百个循环,然后噗:致命错误:在xxx行xxx上超过30秒的最大执行时间

对我来说,唯一的解决方案是每次循环中断后手动递增我的计数器。

还有其他解决方案吗?请帮助!

3 个答案:

答案 0 :(得分:5)

不要对每个记录进行一次查询。您可以使用一个语句执行多个插入。以下示例同时执行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 = '';
  }
}

答案 1 :(得分: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
  }

}

答案 2 :(得分:0)

最有帮助的答案是Jay Blanchard的评论:

  

尝试使用set_time_limit()功能。致电set_time_limit(0)会   删除执行脚本的任何时间限制。

我在页面的开头插入了set_time_limit(0),现在我的PHP脚本完美无缺!