Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP连接多个数据库的单一方法_Php_Mysql_Pdo - Fatal编程技术网

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

PHP连接多个数据库的单一方法,php,mysql,pdo,Php,Mysql,Pdo,下面的代码给出了我的问题:如何使用单个方法连接到多个数据库 配置设置数组: $GLOBALS['config'] = array( 'mysql' => array( 'host' => '127.0.0.1', 'username' => 'root', 'password' => '', 'db' => array( 'db1' => 'database1', 'db2' => 'dat

下面的代码给出了我的问题:如何使用单个方法连接到多个数据库

配置设置数组:

$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')

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

PDO不提供切换数据库的功能

假设同一用户有权访问另一个数据库,您仍然可以通过在表名前加上该数据库的前缀来对该数据库运行查询

$pdo->query('SELECT * FROM database2.table');
您还可以执行此处确认的use语句:


PDO不提供切换数据库的功能

假设同一用户有权访问另一个数据库,您仍然可以通过在表名前加上该数据库的前缀来对该数据库运行查询

$pdo->query('SELECT * FROM database2.table');
您还可以执行此处确认的use语句:


您可以创建多个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());
    }
}

这非常适合切分,因为不同的模式可能会变成不同的服务器。

您可以创建多个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());
    }
}

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

您到底在问什么,如何连接到多个数据库,或者如何保持连接打开?可能与您所问的完全相同,如何连接到多个数据库或如何保持连接处于打开状态?我建议不要使用
USE
,因为您每次都需要使用它来确保使用的是正确的数据库。您还可以创建多个PDO对象。我同意这一点。前缀(或多个对象)肯定是更好的解决方案。如果您的查询跨越两个数据库,这也是唯一的方法。我建议不要使用
USE
,因为您每次都需要使用它来确保使用的是正确的。您还可以创建多个PDO对象。我同意这一点。前缀(或多个对象)肯定是更好的解决方案。如果您的查询跨越两个数据库,这也是唯一的方法。您好,谢谢您的回复。我认为你的回答与我所寻找的最接近。我只是想知道,如果有很多数据库,这种方法是否会有麻烦:想必您无论如何都需要在哪个模式上管理哪个连接点。您可以为单个PDO管理器制作一个抽象,将其扩展为每个DB的单例,然后使用静态工厂创建或检索单例。您好,感谢您的回复。我认为你的回答与我所寻找的最接近。我只是想知道,如果有很多数据库,这种方法是否会有麻烦:想必您无论如何都需要在哪个模式上管理哪个连接点。您可以为单个PDO管理器创建一个抽象,将其扩展为每个DB的单例,然后使用静态工厂创建或检索单例。