两个数据库连接:php + mysql

时间:2011-12-25 09:56:46

标签: php mysql database database-connection

我在同一台服务器上有两个数据库,用户名和密码相同。现在我只连接到一个数据库,但我想连接到两个数据库。

现在这是我的代码,只能连接到一个数据库:

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的连接

我该怎么做?谢谢!

2 个答案:

答案 0 :(得分:3)

您需要两个:

,而不是只有一个全局$ link变量
$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或$ link2)。

答案 1 :(得分: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);

然后你需要随身携带你的$ link1和$ link2变量来进行实际查询:

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

然后再次为$ link2执行相同的查询。 在这一点上,最好调查一些用于查询多个数据库的循环,或者一个抽象它的类(如果你通常不论是两个来源的查询)。


实际上还有一个超级惰性选项,如果两个表都是等价的并且在同一台服务器上运行,只是不同的数据库名称。然后,您可以使用UNION ALL附加查询:

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