2010-02-05 119 views
1

假設我在給定的頁面上調用多個函數。用php連接多個mysql數據庫

function getProfile { 
    <mysql code to connect> 
    ... 
    ... 
} 

function getMatchingUsers { 
    <mysql code to connect> 
    ... 
    ... 
} 

如果我在給定的頁面上調用上述兩個函數,是不是會打開到數據庫的多個連接?我假設php會在第一個函數運行後自動關閉數據庫連接,但是它會自動爲第二個函數打開另一個連接。我的問題是,如果我的頁面對數據庫進行一堆調用,該怎麼辦?這對記憶,io等是好的嗎?

回答

0

最簡單的方法是在腳本的開頭進行連接。 mysql函數將使用最後一個打開的連接來完成他們的工作,所以不需要在每個函數內部進行連接。

//Start of your file 
mysql_connect() 


function a(){ 
// no connect here, just use mysql 
mysql_query($sql) 
} 

function b(){ 
// no connect here, just use mysql 
mysql_query($sql) 
} 
+0

這是顯而易見的,但我不能想到它!謝謝...任何陷阱w /這種方法? – luckytaxi 2010-02-05 20:30:57

+0

沒有缺點。它只適用於僅使用一個數據庫的工作 - 但這就是98%的時間。 – 2010-02-06 15:59:06

1

爲什麼不使用某種形式的連接池。這種方式池維護一組連接,你的應用程序只是從池中取回連接並返回它們。游泳池按照要求打開和關閉(並保持一組打開的連接)。

This SO answer涵蓋更多選項wrt。 PHP和連接池。

0

如果連接到相同的mysql服務器,則嘗試使用1個連接。

$host = "localhost"; 
$user = "user"; 
$pass = "password"; 
$database = "dbname"; 
$linkID = mysql_connect($host, $user, $pass) or die("Could not connect to host."); 
mysql_select_db($database, $linkID) or die("Could not find database."); 

請注意,您有一個$ linkID,這就是您用來引用它。作出這樣的連接特定的查詢:

$resultID = mysql_query($query, $linkID) or die("Data not found."); 

當您完成後,關閉該特定連接

mysql_close($linkID) 

如果你有超過1個MySQL的服務器地址,然後使用類似$ linkID2

單獨的參考