PHP中MySQL連線管理

2021-06-08 21:06:22 字數 1394 閱讀 7314

對於php程式來來說,mysql是一種稀缺的資源。mysql預設最大連線數為100,也即是最多接受100個mysql的客戶端連線。因此,php在使用mysql連線時做了一些優化的處理。這些優化,可能對效能有所提公升,但對使用mysql連線的使用卻也造成一些困惑。

建立mysql連線:

resource mysql_connect ( [string server [, string username [, string password [, bool new_link [, int client_flags]]]]] )
當使用mysql_connect()建立乙個mysql連線後,php會把這個連線的資訊,包括host, username, password與連線資源儲存起來。下次呼叫mysql_connect()時,php會預設檢查是否存在乙個引數相同(引數包括host, username, password)的連線資源,如果存在,則直接返回之前建立的資源,而非新建乙個mysql連線。(ps:當兩次呼叫連線的不是相同伺服器時,只能建立新的mysql連線,舊的連線無法共享)

只有當手動指定new_link為true時,php才會避開這個檢查,直接重新向php伺服器發起mysql連線請求。

這種處理在下面這種情況下就會產生錯誤:

$conn1 = mysql_connect($dbhost, $dbuser, $dbpwd);

mysql_select_db('database1', $conn1);

$conn2 = mysql_connect($dbhost, $dbuser, $dbpwd);

mysql_select_db('database2', $conn2);

mysql_query('select * from table1', $conn1);

使用者期望在database1查詢table1的資訊,但是由於在第二次mysql_connect(),php返回的是上一次的mysql連線資源。因此,對於$conn2中切換資料庫也對$conn1造成了影響,$conn1也同時切換預設到資料庫database2,查詢的資訊會是在database2上面的結果。

解決這個問題的方法就是在第二次呼叫mysql_connect()時,指定new_link為true即可。

關閉mysql連線:

對於使用mysql_connect()建立的連線資源,對資源變數進行unset()並不能真正地釋放資源,需要呼叫mysql_close()才能達到釋放mysql連線資源的效果。

需要注意的是:使用mysql_connect()獲取共享mysql連線資源時,呼叫mysql_close()有時並不能釋放mysql連線,只有當所有共享連線資源都呼叫mysql_close()時,php才會真正釋放mysql連線。

HTTP連線管理

http通訊是由tcp ip承載的,tcp ip是全球計算機及網路裝置都在使用的一種常用的分組交換網路分層協議集。http連線實際上就是tcp連線和一些使用連線的規則。tcp的資料是通過名為ip分組 或ip資料報 的小資料塊來傳送的。http要傳送一條報文時,會以流的形式將報文資料的內容通過一條開啟...

TCP連線管理

tcp是面向連線的協議,因此每個tcp連線都有三個階段 連線建立 資料傳送和連線釋放。tcp連線的管理就是使運輸連線的建立和釋放都能正常進行。在tcp連線建立的過程中,要解決以下三個問題 要使每一方都能確知對方的存在。要允許雙方協商一些引數 如最大視窗值 是否使用視窗擴 項 時間戳選項以及服務質量等...

TCP 連線管理

本節將介紹一條tcp連線是如何建立和拆除的。此處假設客戶機a上面的乙個程序想要和服務 器b上的乙個程序建立一條tcp連線。本文前面介紹的是比較正常的連線和拆除,特殊的會在後面介紹。第一步客戶機a的tcp會向伺服器的tcp傳送乙個不包含應用層資料的資料的tcp報文段。該報文段中首部標誌位s yn被置為...