使用PDO查询两个数据库

时间:2014-10-11 13:02:09

标签: php mysql pdo

我正在尝试将我的查询从mysql更改为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);

但查询仅影响第二个数据库。

任何人都可以提供帮助吗?

非常感谢

2 个答案:

答案 0 :(得分:1)

您必须针对两个数据库运行两次查询。不要指望继承为你做那件事

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


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

答案 1 :(得分: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);