我的问题是以下代码如何使用单个方法连接到多个数据库?
配置设置数组:
$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')
如何在此处不指定特定数据库,但允许稍后调用一个?我正在尝试创建一个可重用的类,可以连接到添加到配置数组的任何数据库。
答案 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());
}
}
这对于分片非常有用,因为不同的模式可能会成为不同的服务器。