這篇文章給大家分享的是PHP中PDO關(guān)閉數(shù)據(jù)連接的操作,在手寫(xiě) mysql 的連接操作時(shí),一般都會(huì)使用 mysql_close() 來(lái)進(jìn)行關(guān)閉數(shù)據(jù)庫(kù)連接,下面我們就來(lái)看看PDO 是如何關(guān)閉數(shù)據(jù)的連接的?
????官方說(shuō)明
????要想關(guān)閉連接,需要銷(xiāo)毀對(duì)象以確保所有剩余到它的引用都被刪除,可以賦一個(gè) NULL 值給對(duì)象變量。如果不明確地這么做,PHP 在腳本結(jié)束時(shí)會(huì)自動(dòng)關(guān)閉連接。
$pdo = new PDO('mysql:host=127.0.0.1;port=3306;dbname=blog_test', 'root', ''); $pdo = null;
????官方文檔中說(shuō)得很明白,那就是給 PDO 對(duì)象賦值為 NULL 即可。但是事情真的有那么簡(jiǎn)單嗎?
????實(shí)際測(cè)試
????我們來(lái)這樣進(jìn)行一下測(cè)試,正常情況下,我們打開(kāi)數(shù)據(jù)庫(kù)連接后都不會(huì)直接就關(guān)閉,而是要進(jìn)行一些操作。
$pdo = new PDO('mysql:host=127.0.0.1;port=3306;dbname=blog_test', 'root', ''); $stmt = $pdo->prepare('SELECT * FROM zyblog_test_user'); $stmt->execute(); $pdo = null; sleep(60);
????運(yùn)行上述代碼后,我們?cè)跀?shù)據(jù)庫(kù)使用 show full processlist; 查看連接進(jìn)程,會(huì)發(fā)現(xiàn)當(dāng)前的連接并沒(méi)有馬上關(guān)閉,而是等到 60 秒之后,也就是頁(yè)面執(zhí)行完成之后才會(huì)關(guān)閉。似乎 $pdo = null; 這句并沒(méi)有執(zhí)行成功。
????其實(shí),在官方文檔中已經(jīng)說(shuō)明了這個(gè)情況,只是大家可能不太會(huì)注意。【需要銷(xiāo)毀對(duì)象以確保所有剩余到它的引用都被刪除】,在上面的代碼中,\$stmt 預(yù)編譯 SQL 語(yǔ)句的功能調(diào)用的是 $pdo 對(duì)象中的方法,它們之間產(chǎn)生了引用依賴的關(guān)系,這樣的情況下,直接給 $pdo = null; 是沒(méi)有效果的,我們需要將 $stmt 也賦值為 null 。
$pdo = new PDO('mysql:host=127.0.0.1;port=3306;dbname=blog_test', 'root', ''); $stmt = $pdo->prepare('SELECT * FROM zyblog_test_user'); $stmt->execute(); $stmt = null; $pdo = null; sleep(60);
????mysqli測(cè)試
????那么使用 mysqli 的默認(rèn)擴(kuò)展組件,也就是使用 mysqli 對(duì)象中的 close() 來(lái)關(guān)閉數(shù)據(jù)庫(kù)連接會(huì)有這個(gè)問(wèn)題嗎?還是直接用代碼來(lái)測(cè)試測(cè)試。( mysql 擴(kuò)展已經(jīng)過(guò)時(shí)不推薦使用了,大家如果要自己封裝數(shù)據(jù)庫(kù)操作類(lèi)或者寫(xiě)小 Demo 的話還是要用 mysqli 更好一些 )
$conn = new mysqli('127.0.0.1', 'root', '', 'blog_test'); $result = $conn->query('SELECT * FROM zyblog_test_user'); $stmt = $conn->prepare("SELECT * FROM zyblog_test_user"); $stmt->execute(); $conn->close(); sleep(60);
????在運(yùn)行上述代碼后,我們?cè)跀?shù)據(jù)庫(kù)中查看連接進(jìn)程就不會(huì)看到還在執(zhí)行的連接的,也就是說(shuō)在 mysqli 中調(diào)用 close() 方法是能夠直接馬上關(guān)閉掉數(shù)據(jù)庫(kù)的連接的。
????總結(jié)
? ? 關(guān)于PHP中PDO關(guān)閉數(shù)據(jù)連接的操作就介紹到這,上述示例有一定的借鑒價(jià)值,感興趣的朋友可以參考。最后,想要了解更多關(guān)閉數(shù)據(jù)庫(kù)連接的方法和操作,大家可以關(guān)注其它的相關(guān)文章。