2017-10-16 31 views
0

我该怎么做?如何连接两个数据库实例(有一些规则)(PHP PDO)

规则是:

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

一些注意事项:

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

有些疑惑:

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

您可以连接到两个数据库,但可以一次访问一个数据库吗?我担心,如果你希望同时访问它,那么它是不可能的。 – shashi

+0

@shashi一次可以连接一个实例(我想我需要两个实例)。 – SandroMarques

+0

是的,使两个连接对象,并根据您的需要使用它们 – shashi

回答

0

没有这个的“开箱即用”的功能,但是,你应该能够建立这种没有很多的问题,

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

所以,你的类应该初始化2个DB连接参见(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

希望这将让你对你的方式

+0

对不起@Tim我没有得到重点。 – SandroMarques

+0

主要观点:如果你想要描述的那种功能,你需要建立它。您可以在一个实例中创建2个连接。如果你想在任何地方使用DB类(如示例中所示),只需执行诸如DB :: getInstance() - > read(“Select * from example”) – Tim

+1

如果你想有更具体的答案:share一些代码示例为您的情况。 – Tim