【问题标题】:How to connect to multiple databases in a single PHP page? [duplicate]如何在单个 PHP 页面中连接到多个数据库? [复制]
【发布时间】:2010-12-05 09:32:47
【问题描述】:
可能重复:
How do you connect to multiple MySQL databases on a single webpage?
如果我想连接到一个数据库做一些查询,然后再从另一个数据库做另一个查询。我该怎么做?我只是
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,这会影响在同一页面上调用它两次吗?另外,在调用第二个之前,我是否必须关闭第一个的连接?
【问题讨论】:
标签:
php
mysql
multiple-databases
【解决方案1】:
您需要将数据库连接链接存储在单独的变量中。例如
$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
【解决方案2】:
你需要存储mysql_connect返回的资源,在做mysql_select_db时使用。
$res1 = mysql_pconnect(...);
mysql_select_db("Test", $res1);
$res2 = mysql_pconnect(...);
mysql_select_db("Test", $res2);
然后在查询对应的db时使用$res1或$res2。
mysql_query("select * from test_table", $res1);
mysql_query("select * from test_table", $res2);
【解决方案3】:
你就是这样做的吗?
这将使您的脚本与不同的主机有两个打开的连接,直到它结束。
您可以通过再次调用mysql_pconnect 来重复使用这些连接中的任何一个。
注意我使用了pconnect,这会影响在同一页面上调用它两次吗?
来自docs:
该函数将首先尝试查找已打开的(永久)链接具有相同的主机、用户名和密码
由于你的主机不同,所以会有两个不同的连接
另外,在调用第二个之前,我是否必须关闭第一个的连接?
您不能显式关闭使用mysql_pconnect 打开的连接。
【解决方案4】:
你做了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,这样您就清楚自己要连接到什么。