【问题标题】:Connecting multiple database and join query across database in php在php中连接多个数据库并跨数据库连接查询
【发布时间】:2012-01-17 14:01:24
【问题描述】:

使用 php 我想跨 2 个数据库进行连接查询。

这是我的第一次联系。

$conn = mysql_connect('localhost','root1','pass1'); 
@mysql_select_db('database1',$conn);

这是我的第二次联系。

$conn1 = mysql_connect('localhost','root2','pass2'); 
@mysql_select_db('database2',$conn1);

如果我想从 database1 中获取数据,我正在做以下事情。

$sql = 'SELECT * FROM users';

$result = mysql_query($sql, $conn);

print_r(mysql_fetch_array($result));

第二个数据库也是如此

$sql = 'SELECT * FROM orders';

$result = mysql_query($sql, $conn1);

print_r(mysql_fetch_array($result));

但是当我按如下方式进行连接查询时遇到问题

$sql = 'SELECT a.fname AS fname, a.lname AS lname FROM database1.users a JOIN database2.orders b ON b.creator_id = a.id';

$result = mysql_query($sql);//what should be second parameter over here.

print_r(mysql_fetch_array($result));

【问题讨论】:

    标签: php mysql database


    【解决方案1】:

    您可以通过在表名称前加上数据库名称来执行此操作,就像您在示例中建议的那样。但是登录的用户需要在相同的凭据下访问两个数据库。最后这部分非常重要,否则你将无法做到。

    这为您提供了一个简单但直接的示例:link

    来自该链接的示例(仅适用于相同的凭据):

    SELECT
        c.customer_name,
        o.order_date
    FROM
        db1.tbl_customers c LEFT JOIN
        db2.tbl_orders o ON o.customer_id = c.id
    

    【讨论】:

    • 查询对我来说不是问题。我的问题是保持连接。跨数据库
    • 确保两个数据库使用相同的用户/密码凭据。因此,您的查询可以同时访问它们。否则它将无法正常工作。只需省略 $conn,或者尝试使用其中任何一个会发生什么。
    • 我喜欢这行“只能使用相同的凭据”
    【解决方案2】:

    php 环境下的mysql 模块不支持多数据库连接,此外,该模块的存在只是为了向后兼容。你不应该使用它。

    mysqliPDO 更好,更完整(这些支持事务和准备语句,“mysql”不支持),并且 PDO 还支持多数据库查询。

    老的mysql只有过程式,mysqli可以用在过程式和OO编程中,PDO就是OOP。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多