如何在php和mysql中从多主机数据库表中检索数据

如何在php和mysql中从多主机数据库表中检索数据,php,mysql,mysqli,Php,Mysql,Mysqli,我们有两个数据库连接,如下所示 $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

我们有两个数据库连接,如下所示

$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_查询中使用$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)
通常情况下,单独两个远程数据库连接和检索数据是可行的,它工作得很好

但问题是,何时我希望检索数据以加入两个远程主机数据库

实际上,如何从查询中获取数据,哪两个连接将同时工作

如何在mysqli_查询中设置两个数据库连接链接


需要帮忙吗

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

联邦存储引擎允许您在其中一台服务器上设置一个不包含数据的表—它从另一台服务器提取数据。在SQL查询中,您将其视为普通表,因此可以执行联接、从中选择、插入、删除等操作

但是,默认情况下不会启用联邦存储引擎

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

基本上,您需要使用root shell访问ssh来实现这一点,这意味着如果您的数据库位于共享主机上,那么它可能不是一个真正的解决方案

其他选择包括:

将数据从一个数据库复制到另一个数据库,如临时表,然后进行连接。 将两个表中的所有数据选择到应用程序中,然后在应用程序中执行联接。
您可以在MySQL中使用联邦存储引擎

首先,您必须启用联邦存储引擎

您必须转到MySQL中的my.ini文件并打开它

将其注释为skip federated,而不是skip federated

要粘贴在[mysqld]后面的单词federated copy,如下所示

[mysqld]
federated
在本地服务器中创建一个与远程服务器表相同的表,并在最后添加连接

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

)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://fed_user@remote_host:9306/federated/test_table'; 
由于您的两个表是远程主机,所以可以创建两个联邦表

我希望你能把工作做好

你可以去看看。

您不能这样进行跨服务器查询。检查SO问题和