在mysql中我們會看到有兩種常用的資料庫連接模式,一種是長久串連,另一各是頁面訪問完之後就斷了串連,下面我來分別介紹mysql_connect與mysql_pconnect的區別,有需要瞭解的朋友可參考。
PHP mysql_pconnect
mysql_pconnect() 函數開啟一個到 MySQL 伺服器的持久串連。
mysql_pconnect() 和 mysql_connect() 非常相似,但有兩個主要區別:
1.當串連的時候本函數將先嘗試尋找一個在同一個主機上用同樣的使用者名稱和密碼已經開啟的(持久)串連,如果找到,則返回此串連標識而不開啟新串連。
2.其次,當指令碼執行完畢後到 SQL 伺服器的串連不會被關閉,此串連將保持開啟以備以後使用(mysql_close() 不會關閉由 mysql_pconnect() 建立的串連)。
文法
mysql_pconnect(server,user,pwd,clientflag)參數 描述
server 可選。規定要已連線的服務器。
可以包括連接埠號碼,例如 "hostname:port",或者到本地通訊端的路徑,例如對於 localhost 的 ":/path/to/socket"。
如果 PHP 指令 mysql.default_host 未定義(預設情況),則預設值是 'localhost:3306'。
user 可選。使用者名稱。預設值是伺服器處理序所有者的使用者名稱。
pwd 可選。密碼。預設值是空密碼。
clientflag 可選。client_flags 參數可以是以下常量的組合:
•MYSQL_CLIENT_SSL - 使用 SSL 加密
•MYSQL_CLIENT_COMPRESS - 使用壓縮協議
•MYSQL_CLIENT_IGNORE_SPACE - 允許函數名後的間隔
•MYSQL_CLIENT_INTERACTIVE - 允許關閉串連之前的互動逾時非啟用時間
傳回值
如果成功,則返回一個 MySQL 持久串連標識符,出錯則返回 FALSE。
提示和注釋
注釋:選擇性參數 clientflag 自 PHP 4.3.0 版起可用。
提示:要建立一個非持久串連,請使用 mysql_connect() 函數。
例子
| 代碼如下 |
複製代碼 |
$con = mysql_pconnect("localhost","mysql_user","mysql_pwd"); if (!$con) { die('Could not connect: ' . mysql_error()); } ?> |
PHP mysql_connect
mysql_connect() 函數開啟非持久的 MySQL 串連。
文法
mysql_connect(server,user,pwd,newlink,clientflag)參數 描述
server 可選。規定要已連線的服務器。
可以包括連接埠號碼,例如 "hostname:port",或者到本地通訊端的路徑,例如對於 localhost 的 ":/path/to/socket"。
如果 PHP 指令 mysql.default_host 未定義(預設情況),則預設值是 'localhost:3306'。
user 可選。使用者名稱。預設值是伺服器處理序所有者的使用者名稱。
pwd 可選。密碼。預設值是空密碼。
newlink 可選。如果用同樣的參數第二次調用 mysql_connect(),將不會建立新串連,而將返回已經開啟的串連標識。參數 new_link 改變此行為並使 mysql_connect() 總是開啟新的串連,甚至當 mysql_connect() 曾在前面被用同樣的參數調用過。
clientflag 可選。client_flags 參數可以是以下常量的組合:
•MYSQL_CLIENT_SSL - 使用 SSL 加密
•MYSQL_CLIENT_COMPRESS - 使用壓縮協議
•MYSQL_CLIENT_IGNORE_SPACE - 允許函數名後的間隔
•MYSQL_CLIENT_INTERACTIVE - 允許關閉串連之前的互動逾時非啟用時間
傳回值
如果成功,則返回一個 MySQL 串連標識,失敗則返回 FALSE。
提示和注釋
注釋:指令碼一結束,到伺服器的串連就被關閉,除非之前已經明確調用 mysql_close() 關閉了。
提示:要建立一個持久串連,請使用 mysql_pconnect() 函數。
例子
| 代碼如下 |
複製代碼 |
$con = mysql_connect("localhost","mysql_user","mysql_pwd"); if (!$con) { die('Could not connect: ' . mysql_error()); } // 一些代碼... mysql_close($con); ?> |
mysql_connect與mysql_pconnect的區別
這倆函數用法上差不久不多,網上有說應當用pconnect的,pconnect是個 好器材;也有視pconnect如洪水猛獸的,果斷不讓用pconnect的,也有立場模糊不清的。那這個器材到底如何呢?
永遠連結並不是說,辦事器開啟了一個串連,然後所有的人都共用這個連結。永遠串連一樣是每個用戶端來就開啟一個串連,有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指令碼的事 還關係到資料庫和辦事器的設定。
http://www.bkjia.com/PHPjc/630712.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/630712.htmlTechArticle在mysql中我們會看到有兩種常用的資料庫連接模式,一種是長久串連,另一各是頁面訪問完之後就斷了串連,下面我來分別介紹mysql_connect與...