简体   繁体   中英

Querying two databases with PDO

I'm trying to change my queries from mysql to PDO because I need to query at the same time two different databases on different servers.

I've done these classes so far

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;
    }   
}

and then

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

but the query affects only the second database.

Anyone can help?

Thanks a lot

you had to run your query twice against two databases. don't expect the inheritance to do that for you

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


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

I don't think you needed another child class, you can easily switch database using :

USE DATABASENAME

So for example you can do:

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

or perhaps create a function to select db:

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

then use it:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM