當需要使用PHP連接MySQL數據庫的時候,會發現有兩種數據庫連接函數:mysql_connect()和mysql_pconnect()。
1、mysql_connect()
在腳本開始的時候,mysql_connect()會創建一個新的連接,腳本結束的時候就會關閉連接。腳本每一次執行,它都會創建一個新的連接。
2、mysql_pconnect()
當使用mysql_pconnect()連接數據庫時,它首先會判斷是否已經存在了數據庫連接,如果存在,就會利用先用的資源ID,反之,就會創建一個新的連接。
在創建連接之後,函數返回資源ID(如果有)。當腳本再次調用的時候,它並不會創建新的連接。當然,腳本結束的時候,也不會關閉連接。這稱之為持久連接。
但是,使用mysql_pconnect()時,需要對服務器配置做一下微調,譬如限制連接數,超時連接,以及處理空連接等。
3、怎麼使用這兩個函數
如果你的應用有很大流量,應該使用mysql_pconnect()函數,反之考慮mysql_connect()函數。
如果PHP和MySQL在同一台服務器上或者在本地網絡,連接次數是可以忽略的,因為無論在哪種情況之下,持久連接都沒有優勢可言。
4、使用mysql_pconnect()應該留意的事
一般來說,當你鎖定一個表時,連接關閉之後是就自動解鎖了。但由於持久連接不關閉,任何你不小心鎖定的表仍然會保持鎖定的狀態,唯一解鎖的辦法就是等待連接超時或者手動殺死進程。在進行事物處理時也會造成這個問題。
同樣,臨時表在連接關閉之後也會被刪除。但由於持久連接不關閉,臨時表就不再是臨時表了。如果你完成需求後不刪除臨時表,它將作為一個新的客戶端連接,並且是對於同一個連接。在設置Session變量的時候,會造成同樣的問題。
在Apache上使用持久連接的效果並不會很好。當Apache收到客戶端的一個請求時,會打開一個新的數據庫連接,而不是利用已經存在持久連接去打開數據庫,這將導致很多空閒進程、浪費資源,當達到最大連接數時,還是造成未知錯誤。