整理的乙個在phpchina的乙個問題:
1.用mysql_connect()函式建立乙個單例類,比如:
[code=php]class db
public static function conn()
return self::$db;
}[/code]2.直接使用pconnect長連線
3.建立乙個資料庫操作類,構建例項的時候連線資料庫,銷毀的時候關閉連線(mysql_close)
4.優先採用長連線php**
[code="php"]if(mysql_pconnect())
else[/code]以上四個方式採用哪個效能高?或者針對不同的併發情況,什麼場景使用什麼連線較好?
有人回答如下:
在php層面,無論你怎麼寫**,都是半斤八兩,沒啥區別。我來強調下長連線和普通鏈結的區別:
永久鏈結並不是說,伺服器開啟了乙個連線,然後所有的人都共享這個鏈結。永久連線一樣是每個客戶端來就開啟乙個連線,有200人訪問就有200個連線。其 實mysql_pconnect()本身並沒有做太多的處理, 它唯一做的只是在php執行結束後不主動close掉mysql的連線.
在php經cgi方式執行時pconnect和connect是基本沒有區別的, 因為cgi方式是每乙個php訪問起乙個程序, 訪問結束後程序也就結束了, 資源也全釋放了. 當php以apache模組方式執行時, 由於apache有使用程序池, 乙個httpd程序結束後會被放回程序池, 這也就使得用pconnect開啟的的那個mysql連線資源不被釋放, 於是有下乙個連線請求時就可以被復用.這就使得在apache併發訪問量不大的時候, 由於使用了pconnect, php節省了反覆連線db的時間, 使得訪問速度加快. 這應該是比較好理解的. 但是在apache併發訪問量大的時候, 如果使用pconnect, 會由於之前的一些httpd程序占用的mysql連線沒有close, 則可能會因為mysql已經達到最大連線著, 使得之後的一些請求永遠得不到滿足.若mysql最大連線數設為500, 而apache的最大同時訪問數設為2000,假設所有訪問都會要求訪問db, 而且操作時間會比較長,當前500個請求的httpd都沒有結束的時候,之後的httd程序都是無法連線到mysql的(因已經達到mysql最大連線 數). 只有當前500個httpd程序結束或被復用才可以連線得到了mysql
當db操作複雜, 耗時較長時, 因httpd會fork很多併發程序處理, 而先產生的httpd程序不釋放db連線, 使得後產生的httpd程序無法連上db. 因為這樣沒有復用其它httpd程序的mysql連線. 於是會就產生很多連線超時。 在併發訪問量不高時,使用pconnect可以簡單提高訪問速度, 但在併發量增大後, 是否再使用pconnect就要看程式設計師的選擇了.
php對mysql的連線並沒有真正用到連線池, pconnect也只是相當於借了apache的程序池來用, 所以在併發訪問量大的時候pconnect並不能很好的提高訪問db效率.
在實際的應用中,用mysql_pconnect的話,每次重新整理和請求新的頁面都比較快,而用mysql_connect的話,每次重新整理都要重新請求,當資料庫連線比較慢的時候,就能看出差異了。當你的資料庫連線比較慢,db操作不是很複雜,並且你對自己的程式足夠自信,不會產生死鎖的時候,且你對伺服器有控制權的話,滿足以上四個條件中的任意兩個,那麼就可以用 pconnect。
pconnect不用在指令碼裡關閉,可以在mysql中設定lifetime,也可以寫shell定期掃瞄,kill掉休眠過長的連線。 一句話總結:要用好pconnect,不僅僅是php指令碼的事 還關係到資料庫和伺服器的設定。
php連線資料庫
create table message id tinyint 1 not null auto increment,user varchar 25 not null,title varchar 50 not null,content tinytext not null,lastdate date n...
php連線資料庫
天貓內部優惠券 設定資料庫變數 db host localhost 資料庫主機名稱,一般都為localhost db user root 資料庫使用者帳號,根據個人情況而定 db passw 資料庫使用者密碼,根據個人情況而定 db name test 資料庫具體名稱,以剛才建立的資料庫為準 連線資...
PHP連線資料庫
php連線資料庫函式 mysql connect 開啟mysql連線 mysql select db 開啟乙個資料庫 和or die 隱藏錯誤和條件顯示 mysql connect 主機 使用者名稱 密碼 mysql select db 開啟資料庫 鏈結標示符 如果不是特宣告連線標示符,則預設為是上...