Mysqli连接来自2个不同数据库的表

时间:2014-03-10 09:35:45

标签: php mysql sql

如何使用这2个连接来运行连接2个表的查询? yesno.table1和sushi.table1?假设我们加入id他们都有相同的ID。 我怎么能这样做?

// Connect to Yesno Database
$this->yesno_db = new mysqli("red", "yesno", "***", "yesnotmp");

if ($this->yesno_db->connect_errno) {
    throw new Exception('Connection failed: '.$this->yesno_db->connect_error);
}   

// Connect to Sushi Database
$this->sushi_db = new mysqli("red", "sushi", "***", "sushi");

if ($this->sushi_db->connect_errno) {
    throw new Exception('Connection failed: '.$this->sushi_db->connect_error);
}

3 个答案:

答案 0 :(得分:7)

这个问题与mysqli(或任何其他API)无关。

要与来自不同数据库的表进行连接,连接到mysql的用户必须拥有两个数据库的SELECT权限。

完成此操作后,只需在连接语句中选择一个数据库,然后使用常用的点语法解决另一个数据库:

SELECT * FROM t1 JOIN db2.t2

按字面意思回答你的问题,

  

我可以使用这2个连接来运行连接2个表的查询吗?

你不能

答案 1 :(得分:2)

这是可能的,但不是你尝试的方式。

首先,您需要拥有一个具有访问这两个数据库权限的mysql用户。

然后,您只需将辅助数据库作为查询的一部分引用。

E.g。

// Connect to Database -- dbuser has permissions for database1 and database2
$this->db = new mysqli("localhost", "dbuser", "***", "database1");

$query = "SELECT t1.*, t2.* 
              FROM table_one AS t1
              INNER JOIN database2.table_two as t2 ON ( t1.id = t2.remote_id ) ";

如果数据库位于两个不同的服务器上,则无法进行此操作。

答案 2 :(得分:0)

这是可能的,但不是很漂亮。

MySQL支持联合存储引擎,有效地允许您在其中一个数据库上设置看起来像一个表的实际上只是与另一个数据库上的实际表的连接。

之前的回复可能有所帮助: -

MySQL -- Joins Between Databases On Different Servers Using Python?