2014-09-25 56 views
-1

我是PHP的初学者。我正在尝试将大量项目插入到数据库中。我正在使用for循环和mysqli_query命令。为什么我的PHP循环每次都坏了?

我的伪代码是这样的:

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

} 

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

对我来说,唯一的解决办法是在循环中断后每次手动增加计数器。

有没有其他解决方案?请帮忙!

+0

检查有多少记录,并做数学你需要插入多少? – 2014-09-25 13:13:34

+7

请定义** poof **? – 2014-09-25 13:13:40

+2

(提示)不要在循环中查询。在循环中创建查询,然后执行循环。这将使它1查询,而不是50k。 – 2014-09-25 13:13:45

回答

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 
    } 

} 
+0

'mysqli_query()'不表示错误,你需要在调用之后使用'或者死掉(mysqli_error($ con))'。 – Barmar 2014-09-25 13:19:56

+0

什么是'catche'?一个错字? – 2014-09-25 13:21:02

+0

是的,它应该是'catch' – 2014-12-11 15:25:49

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 = ''; 
    } 
} 
0

最有用的答案是从周杰伦布兰查德评论:

尝试set_time_limit()功能。调用set_time_limit(0)将 删除任何执行脚本的时间限制。

我已经在页面的开头插入了set_time_limit(0),我的PHP脚本现在完美地工作了!

相关问题