搜尋
首頁後端開發PHP問題PHP中PDO如何關閉連線

本篇文章要為大家介紹PHP中PDO關閉連線的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

PHP中PDO如何關閉連線

在之前我們手寫 mysql 的連線操作時,一般都會使用 mysql_close() 來進行關閉資料庫連線的操作。不過在現代化的開發中,一般使用框架都會讓我們忽略了底層的這些封裝,而且大部分框架都已經預設是使用 PDO 來進行資料庫的操作,那麼,大家知道 PDO 是如何關閉資料的連線的嗎?

官方說明

要想關閉連接,需要銷毀物件以確保所有剩餘到它的參考都被刪除,可以賦一個 NULL 值給物件變數。如果不明確地這麼做,PHP 在腳本結束時會自動關閉連線。
$pdo = new PDO('mysql:host=127.0.0.1;port=3306;dbname=blog_test', 'root', '');
$pdo = null;

官方文件中說得很明白,那就是給 PDO 物件賦值為 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();

$pdo = null;
sleep(60);

執行上述程式碼後,我們在資料庫使用show full processlist; 查看連線進程,會發現目前的連線並沒有馬上關閉,而是等到60 秒之後,也就是頁面執行完成後才會關閉。似乎 $pdo = null; 這句話並沒有執行成功。

其實,在官方文件中已經說明了這個情況,只是大家可能不太會注意。 【需要銷毀物件以確保所有剩餘到它的引用都被刪除】,在上面的程式碼中,\$stmt 預編譯SQL 語句的功能呼叫的是$pdo 物件中的方法,它們之間產生了引用依賴的關係,這樣的情況下,直接給$pdo = null; 是沒有效果的,我們需要將$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測試

那麼使用 mysqli 的預設擴充元件,也就是使用 mysqli 物件中的 close() 來關閉資料庫連線會有這個問題嗎?還是直接用程式碼來測試測試。 ( mysql 擴充已經過時不建議使用了,大家如果要自己封裝資料庫操作類別或是寫小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);

在執行上述程式碼後,我們在資料庫中查看連接進程就不會看到還在執行的連接的,也就是說在mysqli 中呼叫close() 方法是能夠直接馬上關閉掉資料庫的連接的。

總結

其實今天的內容也是官方文件關於資料庫連接這一頁文件上的一個 Note 中的資訊。很早就有大神發現了這個問題並且分享了出來,但是大部分人根本都不知道這個問題,甚至很多人連 PDO 也是可以關閉資料庫連線的都不知道。框架在帶給我們便利的同時,確實也將很多東西封裝的太好了,以至於很多朋友都不去關心底層的一些內容,但是,當你向更高階層邁進時,往往這些底層的東西會成為你的阻礙。

測試程式碼:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202008/source/PHP%E4%B8%ADPDO%E5%85%B3%E9%97%AD%E8%BF%9E%E6%8E%A5%E7%9A%84%E9%97%AE%E9%A2%98.php

推薦學習:php影片教學

#

以上是PHP中PDO如何關閉連線的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:segmentfault。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。