2011-12-25 109 views
0

我在同一臺服務器上有兩個數據庫,使用相同的用戶名和密碼。現在我只連接到一個數據庫,但我想連接到兩者。兩個數據庫連接:php + mysql

現在這是我的代碼,whick只能連接到一個數據庫:

connect1.php

<? 
$servername='localhost'; 

$dbusername='user'; 
$dbpassword='pass'; 

$dbname1='db1'; 
$dbname2='db2'; 

$link1 = connecttodb($servername,$dbname1,$dbusername,$dbpassword); 
$link2 = connecttodb($servername,$dbname2,$dbusername,$dbpassword); 

function connecttodb($servername,$dbname,$dbusername,$dbpassword) 
{ 
    $link=mysql_connect ("$servername","$dbusername","$dbpassword",TRUE); 
    if(!$link){die("Could not connect to MySQL");} 
    mysql_select_db("$dbname",$link) or die ("could not open db".mysql_error()); 
    return $link; 
} 
    ?> 

我result.php顯示的結果與此代碼:

<? 
require "connect1.php"; 

$q=mysql_query("select * from table1 where username='test' order by id",link1); 

while($nt=mysql_fetch_array($q)){ 
echo "$nt[location]"; 
} 

?> 

我想在result.php中顯示類似的數據,但連接到db2

How我可以這樣做嗎?謝謝!

回答

3

不是具有單個全局$鏈接的變量,你需要兩個:

$link1 = connecttodb($servername1,$dbname1,$dbusername1,$dbpassword1); 
$link2 = connecttodb($servername2,$dbname2,$dbusername2,$dbpassword2); 

當然變化connectodb()來:

function connecttodb($servername,$dbname,$dbuser,$dbpassword) 
{ 
    $link=mysql_connect ("$servername","$dbuser","$dbpassword",TRUE); 
    if(!$link){die("Could not connect to MySQL");} 
    mysql_select_db("$dbname",$link) or die ("could not open db".mysql_error()); 
    return $link; 
} 

請注意,我已經添加了第四個參數的mysql_connect,爲參數new_link說明TRUE(如果兩個數據庫駐留在同一臺服務器上,這將只需要)。

然後,對於每個查詢,你必須指定相應的鏈接變量($ LINK1或$鏈接2)根據您要查詢數據庫。

+0

什麼不起作用?你是否收到錯誤信息? – Yaniro 2011-12-25 11:53:42

+1

@SašoKrajnc不要在評論中發佈代碼,它很難閱讀。編輯您的問題,並將其添加到那裏 – 2011-12-25 12:14:32

+0

好的...我發佈更改後的代碼;) – 2011-12-25 12:22:29

0

您需要連接第二次了,這是至關重要的,保持新手柄$link2。所以,你首先需要添加一個新的連接功能,我建議現在創建通過引用參數的全局變量:

function connecttodb(&$link, $servername,$dbname,$dbuser,$dbpassword) 
{ 
    $link=mysql_connect ("$servername","$dbuser","$dbpassword"); 
    if(!$link){die("Could not connect to MySQL");} 
    mysql_select_db("$dbname",$link) or die ("could not open db".mysql_error()); 
} 

connecttodb($link1, $servername, $dbname, $dbusername, $dbpassword); 
connecttodb($link2, $servername2, $dbname, $dbusername, $dbpassword); 

然後,您需要隨身攜帶您的$鏈接1和$鏈接2個變量的actualy查詢:

$q = mysql_query("select * from table1 where username='test' order by id ", $link1); 

然後爲$鏈接2再次做同樣的查詢。 在這一點上,最好研究一下查詢多個數據庫的循環,或者將它抽象出來的類(如果你通常對兩個源進行查詢)。


其實也有一個超懶的選擇,如果兩個表是等價的,並且在同一服務器上運行,只是不同的數據庫名稱。然後,您可以添加使用UNION ALL查詢:

select * from table1 where username='test' order by id 
UNION ALL 
select * from db2.table1 where username='test' order by id 
+0

對不起......我不知道如何取得代碼=) – 2011-12-25 11:26:35

+0

你的語法是錯誤的。也不要發佈密碼。代碼使用反引號。但不要將冗長的代碼發佈到評論中,請使用您的問題上的編輯鏈接。 – mario 2011-12-25 11:27:01

+0

謝謝......現在正在工作;) – 2011-12-25 13:30:28