如何连接两个数据库实例(使用一些规则)(PHP PDO)

时间:2017-10-16 08:42:51

标签: php database postgresql pdo

我该怎么做?

规则是:

  • 可以存在两个数据库(主服务器和从服务器);
  • 只能存在一个数据库(master);
  • 如果查询是SELECT且从站DB可用,则应在从站DB上执行查询。
  • 如果查询不是SELECT或从站DB不可用,则应在主DB上执行查询。

一些注意事项:

  • 两个数据库都在同一台服务器中
  • 数据库位于不同的端口
  • 数据库实例$db应该注入其他类......但是哪个实例?主人还是奴隶?我还不知道查询是否是SELECT。

有些疑惑:

  • 我需要2个数据库实例,对吗?
  • 我应该延长PDO准备方法吗?我认为这是一种不好的做法,但它总比没有好。

1 个答案:

答案 0 :(得分:0)

没有“开箱即用”的功能,但你应该能够在没有很多问题的情况下构建它,

创建一个PHP类,它将提供所需的行为。 对不同数据库的连接数没有限制。

因此,您的类应该初始化2个数据库连接,请参阅(http://php.net/manual/en/pdo.construct.php

创建一个读取函数和一个写入函数。并确保所有应用程序I / O运行都抛出了这个类。

为了确保您不需要每次都重新连接,我建议您制作一个单独的课程。见(https://en.wikipedia.org/wiki/Singleton_pattern

你的课将看起来像这样

<?php 

class DB {

    protected static $instance = null;
    protected $master;
    protected $slave;

    public static function getInstance()
    {
        if (!isset(static::$instance)) {
            static::$instance = new static;
        }
        return static::$instance;
    }

    public __construct(){
        // init master and slave connection
    }

    public read($sql){
        // read slave
        // if not exists read master
    }

    public write($sql){
        // write to master
    }

}
?> 

如果连接不可用,请确保捕获异常,请参阅http://php.net/manual/en/language.exceptions.php

希望这会让你顺利上路