2014-10-11 49 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);