2012-08-04 103 views
3

我只是想知道,在頁面末尾關閉PHP中的MySQL連接是否好?有什麼優勢?關閉它有關係嗎?以PHP結束MySQL連接

真誠, 喬伊

+2

重複的http://stackoverflow.com/questions/2065282/using-mysql-close – Hawili 2012-08-04 12:01:21

回答

0

是的,這是很好的做法,關閉使用後,它會從數據庫.perfomance負擔將提高連接。 應該在使用後始終釋放資源,以便其他用戶可以使用它們。

2

通常不需要使用mysql_close(),因爲非持久性的打開鏈接會在腳本執行結束時自動關閉,但是在不再需要它們時立即終止資源始終是一種好的做法。如果您的腳本長時間持續運行,您不再需要將資源耗盡更近。

2

PHP將在腳本末尾釋放任何資源。

例如,因爲您的腳本可能運行1s格式,但您可能只需要在腳本開始處的幾個ms文件就可以釋放文件資源並鎖定文件。

使用相同的推理,如果你在開始幾ms使用SQL,那麼只能對提取的數據進行處理 - 通過關閉你的連接,你允許另一個連接佔據你的位置(有多少MySQL有限制可以同時建立連接)。

如果另一方面在腳本的末尾釋放它,因爲在腳本的整個執行過程中使用數據庫(間歇性),那麼您只是在腳本的末尾執行PHP會執行的操作。

0

如果您的意思是使用持久連接:通常(99.99%的時間),使用持久連接不是(!)非常明智。當然不是在使用交易時。每個請求的開放和關閉連接的性能損失並不大。

PHP持久連接是不好的,因爲......

  • 它們會導致交易,表鎖,臨時表,會話變量和MySQL的大多數其他有用的功能是非常危險的,可能導致服務器範圍頁面生成期間的死鎖和數據庫錯誤。
  • 它們佔用數百個MySQL套接字和線程,增加了在某處出現限制(打開文件,mysql設置,內核限制?)的風險。
  • 當某些事情因爲持續連接而中斷時,肯定會非常難以診斷,因爲它只會在某個線程以特定順序提供特定請求後纔會顯示。
  • 帶有一個Web服務器池,一個慢速Web服務器可以備份並消耗太多的連接,它不能使用,其他服務器無法創建連接來完成請求。

例如參見這篇文章。

http://meta.wikimedia.org/wiki/Why_persistent_connections_are_bad

一般來說它也是良好的編程習慣明確地釋放你儘快掌握,因爲它們可以再由競爭程序的腳本中使用的所有資源。使用構造函數和析構函數('智能資源')是一個很好的方法。在PHP中,您的腳本可能以致命錯誤結束,在這種情況下,您無法自己釋放它們。

+0

在腳本結束之前調用析構函數(我不記得是否在註冊關閉函數之前或之後)。因此,在對象超出範圍之後不會立即調用它們,因此它們的用處非常有限。 – 2012-08-04 14:48:15

+0

同意。 PHP不是C++或Java。 – 2012-08-06 10:33:59