2014-09-04 52 views
-1

检索来自多个主机数据库表中的数据,我们有两个数据库连接,这在下文中给出,如何在PHP和MySQL

$link1 = mysqli_connect($host1,$user1,$pass1,$db1); 
$link2 = mysqli_connect($host2,$user2,$pass2,$db2); 

这里,主机和数据库是远程的。

$query = "SELECT db1_tbl1.name as name,db1_tbl1.email as email ,db2_tbl2.address 
as address FROM db1.table1 as db1_tbl1 INNER JOIN db2.tble2 as db2_tbl2 ON 
db1_tbl1.std_id = db2_tbl2.std_id WHERE program_id = '$program_id' LIMIT 1,10"; 

mysqli_query($link1,$query); 

如果我使用在mysqli_query $ LINK1,误差被示出

SELECT command denied to user 'user_name'@'remote_host_ip' for table 'table_name' 
For First Link($link1) 

如果我使用$ LINK2,

SELECT command denied to user 'user_name'@'remote_host_ip' for table 'table_name' 
For Second Link($link2) 

通常情况下,分别在两个远程数据库连接和检索数据是好吧(它完美地工作)

但问题是显示何时我想retr ieve数据加入两个远程主机数据库。

其实,我怎样才能从查询哪些两个连接将同时工作的数据。

如何设置mysqli_query

普莱斯任何帮助,这两个数据库连接链接?

+0

你不能做这样的跨服务器查询。检查SO问题[MySQL跨服务器选择查询](http://stackoverflow.com/questions/810349/mysql-cross-server-select-query)和[MySQL - 数据库之间的连接..](http:// stackoverflow .COM /问题/ 5832787/MySQL的 - 连接的数据库上,不同的服务器之间 - - 使用的Python) – bansi 2014-09-04 06:56:55

回答

1

您可以在MySQL中使用FEDERATED存储引擎。

首先,您必须启用FEDERATED存储引擎。

你必须去my.ini文件在MySQL中并打开它。

评论它#skip-federated而不是skip-federated

单词“联合”复制粘贴后的[mysqld]像下面

[mysqld] 
federated 

的表在本地服务器中创建与您的远程服务器上的表并添加在最后

CREATE TABLE federated_table (
.... 
.........(same as your remote server table) 

) 
ENGINE=FEDERATED 
DEFAULT CHARSET=latin1 
CONNECTION='mysql://[email protected]_host:9306/federated/test_table'; 
连接

既然你的两个表是远程主机,你可以创建两个联邦表

我希望你能完美地完成你的工作。

您可以访问它。 http://dev.mysql.com/doc/refman/5.1/en/federated-create-connection.html

0

使用MySQL中的FEDERATED存储引擎可以做到这一点。

FEDERATED存储引擎允许您在其中一个不包含数据的服务器上设置表 - 它从其他服务器获取数据。在您的SQL查询中,您将它视为普通表,因此您可以进行连接,从中进行选择,插入,删除等。

但FEDERATED存储引擎默认情况下未启用。

您需要能够使用--federated标志重新启动Mysql服务器二进制文件。

基本上,您需要拥有root shell访问权限(ssh)来执行此操作,这意味着如果您的数据库位于共享主机上,则可能不是真正的解决方案。

其他选项是:

  1. 复制从一个数据库到另一个数据库的数据,然后进行连接(如临时表)。
  2. 将两个表中的所有数据选择到应用程序中,然后在应用程序中执行连接。