2014-10-17 10 views
2

我在這裏有點困惑,我正在放鬆自己,並努力一點。我一直在使用Aura SQL(php),並且已經實現了我所需要的功能,但是,有必要連接到多個數據庫來更新我已通過的一些遺留代碼。PHP靈氣SQL,在類裏面打開數據庫

class Core { 
     public $pdo; 
     private static $instance; 

     private function __construct() { 

      $this->pdo = new ExtendedPdo(
       'mysql:host=localhost;charset=utf8;dbname=db', 
       'user', 
       'pass' 
      ); 
      $this->pdo->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, 'SET NAMES utf8'); 
     } 

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

我曾嘗試通過構造函數中傳遞的值修改,但是,它似乎被忽略例如:

private function __construct($db_name) { 
     if !empty($db_name)) { $this->db = $db_name; } else { $this->db = 'default_db'; } 

     $this->pdo = new ExtendedPdo(
      'mysql:host=localhost;charset=utf8;dbname='.$this->db.'', 
    .... 

通常你會使用的getInstance();但我一直在嘗試實例化一個新對象來訪問其他數據庫。

感謝您的任何意見。

回答

1

請查看ConnectionLocator,通過它您可以創建默認連接和其他連接。從自述文件中獲取代碼片段。

<?php 
use Aura\Sql\ConnectionLocator; 
use Aura\Sql\ExtendedPdo; 

// default connection 
$default = function() { 
    return new ExtendedPdo(
     'mysql:host=default.db.localhost;dbname=database', 
     'username', 
     'password' 
    ); 
}; 

// read connections 
$read = array(
    'slave1' => function() { 
     return new ExtendedPdo(
      'mysql:host=slave1.db.localhost;dbname=database', 
      'username', 
      'password' 
     ); 
    }, 
    'slave2' => function() { 
     return new ExtendedPdo(
      'mysql:host=slave2.db.localhost;dbname=database', 
      'username', 
      'password' 
     ); 
    }, 
    'slave3' => function() { 
     return new ExtendedPdo(
      'mysql:host=slave3.db.localhost;dbname=database', 
      'username', 
      'password' 
     ); 
    }, 
); 

// write connection 
$write = array(
    'master' => function() { 
     return new ExtendedPdo(
      'mysql:host=master.db.localhost;dbname=database', 
      'username', 
      'password' 
     ); 
    }, 
); 

// configure locator at construction time 
$connections = new ConnectionLocator($default, $read, $write); 
$default_connection = $connections->getDefault(); 
$read_slave1_connection = $connections->getRead('slave1'); 
$read_any_connection = $connections->getRead(); 
$write_connection = $connections->getWrite(); 
+1

謝謝Hari,只有在我解決之後纔看到這個。但它會很有用。再次感謝。 – 2015-01-06 20:52:40

+0

歡迎您:) – 2015-01-09 11:51:17