2011-09-29 100 views
1

很抱歉,如果這是一個真正的新手問題(也是PHP的新手),但我不能從文檔看着辦吧:切換數據庫

我希望能夠使用一個默認的數據庫,如果我不speficy別的,而且使用$這個 - >數據庫具有以下配置工作正常:

$active_group = 'default'; 
$active_record = TRUE; 

$db['default']['hostname'] = 'localhost'; 
$db['default']['username'] = 'root'; 
$db['default']['password'] = 'root'; 
$db['default']['database'] = 'ion_auth'; 
$db['default']['dbdriver'] = 'mysql'; 
$db['default']['dbprefix'] = ''; 
$db['default']['pconnect'] = TRUE; 
$db['default']['db_debug'] = TRUE; 
$db['default']['cache_on'] = FALSE; 
$db['default']['cachedir'] = ''; 
$db['default']['char_set'] = 'utf8'; 
$db['default']['dbcollat'] = 'utf8_general_ci'; 
$db['default']['swap_pre'] = ''; 
$db['default']['autoinit'] = TRUE; 
$db['default']['stricton'] = FALSE; 

$db['visitorsDB']['hostname'] = 'localhost'; 
$db['visitorsDB']['username'] = 'root'; 
$db['visitorsDB']['password'] = 'root'; 
$db['visitorsDB']['database'] = 'visitorsDB'; 
$db['visitorsDB']['dbdriver'] = 'mysql'; 
$db['visitorsDB']['dbprefix'] = ''; 
$db['visitorsDB']['pconnect'] = TRUE; 
$db['visitorsDB']['db_debug'] = TRUE; 
$db['visitorsDB']['cache_on'] = FALSE; 
$db['visitorsDB']['cachedir'] = ''; 
$db['visitorsDB']['char_set'] = 'utf8'; 
$db['visitorsDB']['dbcollat'] = 'utf8_general_ci'; 
$db['visitorsDB']['swap_pre'] = ''; 
$db['visitorsDB']['autoinit'] = TRUE; 
$db['visitorsDB']['stricton'] = FALSE; 

但後來我想在我的車型之一,以使用第二個數據庫,所以我嘗試這樣做:

function __contruct() { 
     parent::__construct(); 
     $this->db = $this->load->database('visitorsDB', TRUE); 
    } 

    public function getAllVisitors($paramArr) { 
     //$this->db = $this->load->database('visitorsDB', TRUE); 

但那不行。只有當我取消註釋最後一行時,我才能在方法本身中加載數據庫才能工作。我不明白爲什麼。我也嘗試在類的開頭聲明一個新的類變量 - private $ myDB; - 然後在構造函數中實例化它 - $ myDB = $ this-> load-> database('visitorsDB',TRUE);

但這也沒有效果。那麼我怎樣才能爲整個模型切換數據庫呢?

+0

當你在你的模型('專用$ myDB')創建了一個新的屬性,並試圖從你的構造設置你做了'$ MYDB = ... '或'$ this-> myDB = ...'? – birderic

回答

1

我不會推薦通過覆蓋$this->db來選擇第二個數據庫。只需在您需要的模型中爲您的其他數據庫添加一個屬性並通過它訪問它。在你的模型中這樣做:

private $myDB; 

function __construct() { 
    parent::__construct(); 
    $this->myDB = $this->load->database('visitorsDB', TRUE); 
} 

function getAllVisitors() { 
    return $this->myDB->someMethod(); // Or use active record, etc... 
} 

我知道你的問題你說你做了類似的事情,但我不確定你是否做得正確。這將是這樣做的正確方法,我不明白爲什麼如果這樣做是不行的。

+0

嗨,謝謝,但那是我無法嘗試的。我甚至現在再試一次,複製你的代碼,以防萬一我犯了一個小錯誤,但沒有去......這是行不通的。只要我把函數放入函數中,它就可以正常工作。就好像函數沒有訪問數據庫,即使我已經聲明瞭一個成員變量,並試圖使用$ this來訪問它,就像在你的例子中一樣... – Anders

+0

實際上,問題是一個簡單的錯字...在構造函數中構造而不是構造...所以,即使我已經嘗試過這種方式,你的答案沒有錯別字,所以我相信你的答案:-) – Anders

2

當數據庫的登錄用戶改變

private $db; 

function __construct() { 
    parent::__construct(); 

    if($this->session->userdata('username') == "swaroop") 
     $this->db = $this->load->database('visitorsDB', TRUE); 
    else 
     $this->db = $this->load->database('default', TRUE); 
}