2017-02-17 32 views
0

多個數據庫的連接,如果我有服務器的IP地址數組:創建PDO

$servers = array('1.2.3.4','4.5.6.7','7.8.9.10'); 

我如何通過他們和循環連接到數據庫,從每個服務器,然後關閉獲取數據?

foreach ($servers as $v){ 
    $bdb = new PDO('mysql:host='.$v.';dbname=someDB','user','pass'); 
    $sel = "SELECT data from table"; 
    $stmt = $bdb->query($sel); 
    while($r = $stmt->fetch()){ 
      $result[$v]['data'] = $r['data']; 
    } 
} 

我期望的結果將是:

print_r($result); 

array 
(
    [1.2.3.4] => Array 
       (
        [data] => 'someData' 
       ) 
    [2.3.4.5] => Array 
       (
        [data] => 'someOtherData' 
       ) 
    [7.8.9.10] => Array 
       (
        [data] => 'someOtherOtherData' 
       ) 
) 

目前上面的代碼只能從服務器陣列的第一個值產生的結果。

我都試過,沒有運氣

+0

您確定每個連接都成功嗎?此外,您在連接字符串中發佈了打印錯誤(錯過結尾''') – Machavity

+0

嘗試在運行SELECT語句以查看正在運行的錯誤之後打印查詢結果。我假設你對所有服務器都有相同的用戶和密碼? –

+0

通過命令行從服務器連接到數據庫連接好。 – bart2puck

回答

1

我認爲你必須關閉每次迭代後的連接設置$ BDB = NULL和取消($ BDB)。否則,你必須建立一個有連接的數組,並且不要每次都在同一個變量中使用它們。

foreach ($servers as $v){ 
    $bdb = new PDO('mysql:host='.$v.';dbname=someDB','user','pass'); 
    $sel = "SELECT data from table"; 
    $stmt = $bdb->query($sel); 
    while($r = $stmt->fetch()){ 
      $result[$v]['data'] = $r['data']; 
    } 
    $bdb = null; 
} 

如果以這種方式關閉連接,將變量設置爲null並刪除連接,它應該可以工作。那麼應該有可能在下一次迭代中創建一個新的。

+0

我在while語句中設置了bdb。不是在結束之後。 – bart2puck