2009-06-25 64 views
61

,我做了以下內容:PHP中的PDO開做SQL連接有當我打開PHP只用PHP的內置的MySQL功能的MySQL連接被關閉

$link = mysql_connect($servername, $username, $password); 
mysql_select_db($dbname); 
//queries etcetera 
mysql_close($link); 

當我打開一個連接PDO,它看起來像這樣:

$link = new PDO("mysql:dbname=$dbname;host=$servername",$username,$password); 
//prepare statements, perform queries 

我必須明確地關閉連接像我mysql_connect()mysql_close()嗎?如果不是,PHP如何知道我何時完成連接?

TIA。

回答

76

使用$link = null讓PDO知道它可以關閉連接。

PHP: PDO Connections & Connection Management

一旦成功連接到數據庫,PDO類的一個實例返回到你的腳本。該連接在該PDO對象的生命週期中保持活動狀態。要關閉連接,您需要通過確保刪除所有剩餘對象的引用來刪除對象 - 您可以通過將NULL指定給保存該對象的變量來執行此操作。如果你沒有明確地做到這一點,PHP會在腳本結束時自動關閉連接。

+1

謝謝!非常感激。 – benjy 2009-06-25 23:04:07

11

當PHP腳本完成執行時,所有連接都關閉。此外,您不必明確關閉與mysql_close()的連接。

0

http://uk3.php.net/pdo

從我收集我看不出仍要關閉它在PHP手冊,和腳本我趕緊看了看從來沒有實例關閉從我能看到反正連接。

5

您還可以限制連接到本地功能。這樣,只要功能完成,連接就會關閉。

11

PDO不提供這樣的功能。通過PDO連接通過PHP中的PDO對象refcount間接管理。

但是有時候你想要關閉連接,不管是否有refcount。要麼因爲你無法控制它,需要它來進行測試或類似的操作。

通過運行SQL查詢,您可以關閉Mysql與PDO的連接。即能連接到MySQL服務器的每個用戶都能夠KILL至少它自己的線程:

/* 
* Close Mysql Connection (PDO) 
*/ 

$pdo_mysql_close = function (PDO $connection) { 

    $query = 'SHOW PROCESSLIST -- ' . uniqid('pdo_mysql_close ', 1); 
    $list = $connection->query($query)->fetchAll(PDO::FETCH_ASSOC); 
    foreach ($list as $thread) { 
     if ($thread['Info'] === $query) { 
      return $connection->query('KILL ' . $thread['Id']); 
     } 
    } 
    return false; 
}; 

$pdo_mysql_close($conn); 

相關MySQL文檔:

相關Stackoverflow問題:

1

那麼看到的$link爲PDO被分配一個對象,PHP將盡快設置爲null作爲腳本運行,因此,它不再是一個對象。因此你可以這樣做:

$link = new PDO("mysql:dbname=$dbname;host=$servername",$username,$password); 

//prepare statements, perform queries 

$link = null;