PHP中MySQL串連管理

來源:互聯網
上載者:User

對於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串連請求。

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

  1. $conn1 = mysql_connect($dbhost, $dbuser, $dbpwd);  
  2. mysql_select_db('database1', $conn1);  
  3. $conn2 = mysql_connect($dbhost, $dbuser, $dbpwd);  
  4. mysql_select_db('database2', $conn2);  
  5.   
  6. 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串連。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.