2014-10-11 55 views
0

我試圖將我的查詢從mysql更改爲PDO,因爲我需要同時查詢不同服務器上的兩個不同數據庫。用PDO查詢兩個數據庫

我所做的這些類到目前爲止

class Db extends PDO { 

    public $db; 

    public function __construct($dbhost = 'host1', $dbname = 'db1', $dbuser = 'user1', $dbpass = 'user2', $dbtype = 'mysql') { 
     PDO::__construct($dbtype . ':host=' . $dbhost . ';dbname=' . $dbname, $dbuser, $dbpass); 
    } 

    function sql_query($sql) { 
      $result = PDO::query($sql); 

     return $result; 
    } 

    function sql_fetcharray($result) { 
      $rs = $result->fetch(PDO::FETCH_ASSOC); 

      return $rs; 
    } 

    function sql_numrows($result) { 
      $rs = $result->rowCount(); 

     return $rs; 
    } 
} 

class Db2 extends Db { 

    public $db; 

    public function __construct($dbhost = 'host2', $dbname = 'db2', $dbuser = 'user2', $dbpass = 'pass2', $dbtype = 'mysql') { 
     PDO::__construct($dbtype . ':host=' . $dbhost . ';dbname=' . $dbname, $dbuser, $dbpass); 
    } 

    function sql_query($sql) { 
     parent::sql_query($sql); 

     $result = PDO::query($sql); 

     return $result; 
    } 

    function sql_fetcharray($result) { 
     $rs = $result->fetch(PDO::FETCH_ASSOC); 

     return $rs; 
    } 

    function sql_numrows($result) { 
     $rs = $result->rowCount(); 

     return $rs; 
    } 
} 

然後

$db = new Db2; 
$sql = "query"; 
$result = $db->sql_query($sql); 

但查詢隻影響第二個數據庫。

任何人都可以幫忙嗎?

非常感謝

回答

1

,你不得不對兩個數據庫執行兩次查詢。不要指望繼承爲你做的

$db = new Db2(); 
$sql = "query"; 
$result = $db->sql_query($sql); 


$db1 = new Db(); 
$sql = "query"; 
$result1 = $db1->sql_query($sql); 
0

我不認爲你需要另一個子類,你可以用輕鬆切換數據庫:

USE DATABASENAME 

因此,舉例來說,你可以這樣做:

$db = new Db; 
$sql = "query"; 
$result = $db->sql_query($sql); 
$db->sql_query('USE DB2'); 
$sql2 = "query2"; 
$result2 = $db->sql_query($sql2); 

或者是創建一個函數來選擇DB:

function select_db($db) { 
    $result = PDO::query('USE $db'); 
    return $result; 
} 

然後使用它:

$db = new Db; 
$sql = "query"; 
$result = $db->sql_query($sql); 
$db->select_db('DB2'); 
$sql2 = "query2"; 
$result2 = $db->sql_query($sql2);