如何在单个PHP页面中连接多个数据库?

时间:2009-10-09 15:37:23

标签: php mysql multiple-databases

  

可能重复:
  How do you connect to multiple MySQL databases on a single webpage?

如果我想连接到一个db做一些查询,然后再从另一个DB做另一个查询。我该怎么做?我只是

 mysql_pconnect("host:3306", "user", "password") or die(mysql_error());
 mysql_select_db("Test") or die(mysql_error());

//do some query

 mysql_pconnect("host2:3306", "user", "password") or die(mysql_error());
 mysql_select_db("Test") or die(mysql_error());

//do another query

你是怎么做到的?几个问题。注意我使用了pconnect,这会影响在同一页面上调用它两次吗?另外,在调用第二个之前,我是否必须关闭第一个连接?

4 个答案:

答案 0 :(得分:4)

您需要将数据库连接链接存储在单独的变量中。例如

 $connection_1 = mysql_connect("host:3306", "user", "password") or die(mysql_error());
 mysql_select_db("Test", $connection_1) or die(mysql_error());

 $connection_2 = mysql_pconnect("host2:3306", "user", "password") or die(mysql_error());
 mysql_select_db("Test", $connection_2) or die(mysql_error());

 mysql_query("your query", $connection_1); // run query for first connection
 mysql_query("your query", $connection_2); // run query for second connection

答案 1 :(得分:0)

您需要存储从mysql_connect返回的资源,并在执行mysql_select_db时使用它。

$res1 = mysql_pconnect(...);
mysql_select_db("Test", $res1);

$res2 = mysql_pconnect(...);
mysql_select_db("Test", $res2);

然后在查询相应的数据库时使用$ res1或$ res2。

mysql_query("select * from test_table", $res1);

mysql_query("select * from test_table", $res2);

答案 2 :(得分:0)

  

你是怎么做到的?

这将使您的脚本与不同的主机保持两个打开的连接,直到它结束。

您可以再次致电mysql_pconnect重新使用其中任何一种连接。

  

注意我使用了pconnect,这会影响在同一页面上调用它两次吗?

来自docs

  
    

该函数首先尝试使用相同的主机,用户名和密码找到已经打开的(持久)链接

  

由于您的主机不同,因此会有两种不同的连接

  

另外,在调用第二个连接之前,是否必须关闭第一个连接?

您无法明确关闭使用mysql_pconnect打开的连接。

答案 3 :(得分:0)

你做了RTM,对,因为你没有使用$link_identifier

http://us.php.net/mysql_select_db

  

bool mysql_select_db ( string $database_name [, resource $link_identifier ] )

     

设置服务器上与指定链接标识符关联的当前活动数据库。每次对mysql_query()的后续调用都将在活动数据库上进行。

     

参数

     

database_name   要选择的数据库的名称。

     

link_identifier MySQL连接。

     

如果未指定链接标识符,则假定mysql_connect()打开的最后一个链接。如果没有找到这样的链接,它将尝试创建一个,就好像没有参数调用mysql_connect()一样。如果未找到或建立连接,则会生成E_WARNING级别错误。

无论何时使用pconnect,您都要共享连接(不仅在页面内,而且可能与其他页面共享) - 在这种情况下,请不要这样做。您需要隔离链接,因此需要隔离的事务。您应该考虑使用mysql_connect,并明确使用new_link参数。最后,明确使用$link_identifier,以便明确您要连接的内容。