2012-12-02 65 views
1

我連接到使用
什麼時候應該關閉數據庫連接?

$dbh = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass); 

MySQL數據庫在閱讀通過論壇和教程,它說,它是很好的做法(雖然不是很重要)儘快關閉數據庫連接,你用它完成。所以我的問題是這樣的:我應該在最後一次數據庫操作執行時總是添加$dbh = null;

+0

大多數Web應用程序都需要在多個點上訪問數據庫。只需將其保持打開狀態,並在請求完成時讓它自動關閉。 – PeeHaa

+0

http://php.net/manual/en/pdo.connections.php –

+0

即使設置爲null,也不是立即執行的,因爲它會讓PHP的垃圾回收異想天開。我懷疑它在實踐中有很大的不同。 – eggyal

回答

2

當腳本完成執行時,連接隱式關閉。您可能想要關閉連接的唯一原因是您打算另外打開一個連接;即使如此,PDO也支持多個併發連接。

+0

那麼這是否意味着你永遠不需要關閉PDO? @DC_ – samayo

+2

@Eritrea一般來說,沒有。可能會有特殊情況,但是我個人從未必須手動關閉PDO連接。 –

+0

-1:可用連接的數量是有限的限制,並且空閒連接仍會消耗資源,因此較早關閉連接會增加容量並減少負載。 – symcbean

-1

在php中,您不必經常關閉數據庫連接。因爲在代碼完成後,Web服務器會關閉所有到數據庫的連接,因爲執行已結束。但是在整個執行期間,出於安全原因,您應該關閉它。但是,如果您創建了一個例子守護程序,則出於安全和內存方面的原因,您必須更頻繁地關閉它。打開的連接對於直接數據庫攻擊總是很危險,並保留一些內存。

+0

如何關閉連接使其更安全? – PeeHaa

+0

假設你不關閉任何與MySQL相關的連接,並假設你有一個包含很多部分的應用程序,並且每個部分可以分別與db一起工作。由於他們單獨執行,您將分別連接數據庫。如果你不關閉其中的任何一個,你的安全問題將會出現一些內存問題。例如,如果MySQL達到其最大連接限制,則應用程序將會死亡。然後,對應用程序的每個查詢都將被視爲對MySQL的DOS攻擊。最終,你的服務器將會因爲大量未處理的mysql查詢而死亡。 – mtndesign

+0

您不打開多個連接。你打開一個並將其傳遞給所有需要它的「片段」。如果你需要在你的應用程序中打開很多不同的連接,你經常會犯這樣的錯誤。 – PeeHaa