2017-10-16 30 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