用于连接多个数据库的PHP单一方法

时间:2015-04-20 16:48:36

标签: php mysql pdo

我的问题是以下代码如何使用单个方法连接到多个数据库?

配置设置数组:

$GLOBALS['config'] = array(
'mysql' => array(
    'host' => '127.0.0.1',
    'username' => 'root',
    'password' => '',
    'db' => array(
        'db1' => 'database1',
        'db2' => 'database2'
    )
)

连接数据库:

private function __construct() {
    try {
        $this->_pdo = new PDO('mysql:host=' . Config::get('mysql/host') . ';dbname=' . Config::get('mysql/db/db1'), Config::get('mysql/username'), Config::get('mysql/password'));
    } catch(PDOException $e) {
        die($e->getMessage());
    }
}

所以不要将db1硬编码到连接中:

dbname=' . Config::get('mysql/db/db1')

如何在此处不指定特定数据库,但允许稍后调用一个?我正在尝试创建一个可重用的类,可以连接到添加到配置数组的任何数据库。

2 个答案:

答案 0 :(得分:2)

PDO没有提供切换数据库的功能。

您仍然可以通过在数据库前添加表名来对另一个数据库运行查询,假设同一用户可以访问它。

$pdo->query('SELECT * FROM database2.table');

您还可以执行此处确认的使用声明:Switch between multiple database in PDO

$pdo->exec('USE database2');
$pdo->query('SELECT * FROM table');

答案 1 :(得分:2)

您可以创建多个pdo连接:

private function __construct() {
    try {
        $this->_pdo1 = new PDO('mysql:host=' . Config::get('mysql/host') . ';dbname=' . Config::get('mysql/db/db1'), Config::get('mysql/username'), Config::get('mysql/password'));
        $this->_pdo2 = new PDO('mysql:host=' . Config::get('mysql/host') . ';dbname=' . Config::get('mysql/db/db2'), Config::get('mysql/username'), Config::get('mysql/password'));
    } catch(PDOException $e) {
        die($e->getMessage());
    }
}

这对于分片非常有用,因为不同的模式可能会成为不同的服务器。