使用不同的用户凭据连接多个数据库中的表

时间:2012-05-18 04:49:11

标签: php mysql join

我需要连接来自不同数据库的两个表。
代码看起来像这样:

$tbl1 = 'table1';
$tbl2 = 'table2';

$DB1 = 'DB1';
$DB2 = 'DB2';

$connect1 = mysql_connect(DB_SERVER,DB_USER1,DB_PASSWORD1);
mysql_select_db ($DB1, $connect1);

$connect2 = mysql_connect(DB_SERVER,DB_USER2,DB_PASSWORD2);
mysql_select_db ($DB2, $connect2);
/* note both the DB are in the same server and users has privileges to theyr own datadases say usr1 to DB1, usr2 to DB2 */

mysql_query("SELECT * FROM $DB1.$tbl1 AS tb1 LEFT JOIN $DB2.$tbl2 AS tb2 ON tb1.id = tb2.id", $connect1);

上面的查询返回一个错误,表示table2不存在,很明显因为使用$connect1

帮助我的人!!

3 个答案:

答案 0 :(得分:2)

如果您的两个用户中的每一个只能访问一个数据库而不能访问另一个数据库,则您将无法在一个查询中同时使用这两个数据库/表 - 因为没有用户可以运行该查询。

你要么:

  • 获取有权访问这两个数据库的用户 - 并且因此可以运行此查询
  • 或者从有权访问它的用户那里获取每个数据库/表中的数据 - 然后从PHP代码处理这些数据到合并它们(基本上,进行连接在PHP中,而不是在SQL中;即使这可能不是最有效的想法)

答案 1 :(得分:0)

您无法从两个数据库加入。考虑尽可能使用一个数据库,它使编程更容易并提高性能。有很多方法可以在PHP中完成,但它们相当复杂,并且对性能非常不利。

答案 2 :(得分:0)

至少对于Oracle,alternatives suggested earlier的第三个选项是在DB1中创建一个数据库链接,它将从DB2中提供一些选定的信息。

它的工作方式是首先创建数据库链接

-- as the current user
CREATE DATABASE LINK sales.us.americas.acme_auto.com USING 'sales_us';

-- as another user, shared public
CREATE SHARED PUBLIC DATABASE LINK sales.us.americas.acme_auto.com
CONNECT TO scott
IDENTIFIED BY tiger
AUTHENTICATED BY anupam
IDENTIFIED BY bhide USING 'sales';

然后你可以像

一样查询它
SELECT * FROM target_table@sales.us.americas.acme_auto.com;

并结合查询“本地”数据库。此外,如果您不想每次都输入数据库链接,则可以使用同义词。

这是Oracle DB链接的manual entry,其中包含更多示例和进一步说明。

对于MySQL,this thread中讨论了一些替代方案。显然没有直接替代方案。