2012-05-17 92 views
3

所以,我發現了以下錯誤:MySQL服務器已消失(PHP)

Error Number: 2006 
MySQL server has gone away 

我可以保證所有,但,這是因爲劇本需要一個bazillion分鐘跑,然後更多的查詢是在腳本中間運行。考慮到這是一個僅管理員,龐大的文件編寫腳本,這是可以預料的。 (並且完全可以接受)我認爲MySQL連接正在關閉,因爲PHP/MySQL /有些東西沒有把它打開。然而,我不能爲了我的生活找出如何阻止這種超時發生!

我有我的PHP腳本的頂部以下,但它似乎沒有幫助。

ini_set('default_socket_timeout', -1); 
ini_set('max_execution_time', -1); 
ini_set('memory_limit', -1); 
ini_set('mysql.connect_timeout', -1); 

任何想法如何解決這個問題?謝謝!

+1

您可以檢查連接,然後根據需要重新連接。 – diolemo

+0

我該怎麼做? :O這聽起來像是一個非常棒的解決方案。 – Nathanael

+1

您可以ping服務器(通過連接) http://www.php.net/manual/en/function.mysql-ping.php 返回值指示連接是否仍處於活動狀態。有些版本會自動重新連接(你需要檢查一下)。 – diolemo

回答

7

我認爲一個可行的選擇是mysql_connect每次你打電話mysql_query之前。這確保了在每個查詢之前都會有一個實時連接。

但是更好的方法是首先檢查連接狀態,然後只有在必要時才重新連接。 mysql_ping對於檢查連接狀態非常有用,因此您可以使用它來檢查是否需要重新連接。示例代碼存在於@ galador的answer中。

Thanks @diolemo and @galador。

+2

這會引入太多開銷。您應該檢查連接是否仍然可以在可能已經消失的點上使用。如果你連續有10個快速查詢,那麼在那段時間裏它不太可能消失。但是,如果您在文件傳輸上等待5分鐘,則可能會重新連接。 – diolemo

+0

同意。不知道關於mysql_ping,這將是這個問題的完美解決方案。更新答案! – Unos

+1

'mysql_ping()'不會自** MySQL 5.0.14以後自動重新連接。見[這個答案](http://stackoverflow.com/questions/6231285/fastest-way-to-insert-134675-values-in-remote-database/6231453#6231453)。 – bhamby