2014-09-25 41 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腳本現在完美地工作了!

相關問題