2014-09-04 54 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. 將兩個表中的所有數據選擇到應用程序中,然後在應用程序中執行連接。