2011-12-25 22 views
0

同じユーザー名とパスを持つ同じサーバー内に2つのデータベースがあります。今は1つのデータベースにしか接続していませんが、両方に接続したいと思います。2つのデータベース接続:php + mysql

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]"; 
} 

?> 

今、この1つのデータベースにのみ接続whick、私のコードであるために

私はresult.phpに同様のデータを表示したいが、db2への接続は

それをしてもいいですか?ありがとうございました!

答えて

3

代わりに単一のグローバル$リンク変数を持つのは、次の2つが必要です

$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に4番目のパラメータを追加しました。これはnew_linkパラメータにTRUEと表示されています(これは2つのデータベースが同じサーバにある場合のみ必要です)。

次に、クエリごとに、照会するデータベースに応じて、対応するリンク変数($ link1または$ link2のいずれか)を指定する必要があります。

+0

何がうまくいかないのですか?エラーメッセージが表示されますか? – Yaniro

+1

@SašoKrajncはコメントにコードを投稿しませんが、読みにくいです。代わりに質問を編集して追加してください –

+0

ok ...変更されたコードを投稿します) –

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を持ち歩く必要があるとactualyクエリの$リンク2つの変数:

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

次に、$ link2に対して同じクエリを再度実行します。 そして、この時点で、複数のデータベースを照会するためのいくつかのループや、それを抽象化するクラスを調べることが最善の方法です(とにかく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

申し訳ありません...コードへのコメントの取得方法がわかりません。 –

+0

構文が間違っています。また、パスワードを投稿しないでください。コードを使用するバックティック。とにかくコメントに長いコードを投稿しないでください。あなたの質問に編集リンクを使用してください。 – mario

+0

ありがとうございました...それは今働いています;) –

関連する問題