【问题标题】: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,这样您就清楚自己要连接到什么。

        【讨论】:

          猜你喜欢
          • 2015-01-09
          • 2022-12-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-20
          • 1970-01-01
          • 2023-03-24
          • 1970-01-01
          相关资源
          最近更新 更多