如何使用 PDO 跨两个数据库运行连接查询

Posted

技术标签:

【中文标题】如何使用 PDO 跨两个数据库运行连接查询【英文标题】:How to run a query with a join accross two databases with PDO 【发布时间】:2015-03-14 20:09:05 【问题描述】:

我有两个 PDO 对象代表两个数据库,pdo1 和 pdo2,声明如下:

try 
    $pdo1 = new PDO('mysql:host=localhost;dbname=database1', 'user', 'password');
    $pdo1->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo1->exec('SET NAMES "utf8"');

^ 我对用于第二个数据库的 $pdo2 做了同样的事情。

到目前为止,我访问数据库的方式如下:

try 
     $sql   = 'SELECT * from table1';
     $result = $pdo1->query($sql);  

现在我想运行一个查询,其中两个表跨两个数据库连接。如何使用两个 pdo 对象执行此操作?这就是我所拥有的,但我被困在如何做 $result 部分,我放了 asterixis:

try 
     $sql   = 'SELECT database1.table1.name FROM database1.table1 LEFT JOIN database2.table2
               ON database1.table1.userid = database2.table2.userid';
     $result = $pdo***->query($sql);    
     

以前,它会引用 $pdo1 或 $pdo2,但是如何组合该部分以从组合的 pdo 对象中提取结果?

【问题讨论】:

您必须能够使用 pdo 以某种方式跨两个数据库连接两个表,不是吗? 可以,但您必须使用单个 PDO 对象来访问两个数据库的用户。 php sql join together multiple tables from different databases 的可能重复项 用户可以访问这两个数据库。但是在这种情况下,如何声明 PDO 对象来表示两个数据库? 你没有。只需在连接字符串中声明一个,并像在示例中那样使用 db 前缀。 【参考方案1】:

使用一个连接,然后进行类似的查询

SELECT ... FROM db1.tbl1 JOIN db2.tbl2 ...

(您需要访问这两个数据库的权限。)

【讨论】:

以上是关于如何使用 PDO 跨两个数据库运行连接查询的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中使用多个数据库进行 PDO 连接查询

如何在codeigniter普通mysql和自定义pdo中运行并发数据库连接[重复]

在连接类中使用 PDO 时如何显示 mysql 错误?

DB2如何使用PDO指定连接字符集

如何在不同文件中使用 PDO 连接对象[重复]

如何连接来自两个不同 PDO 对象的表?