2012-10-24 84 views
1

我想爲我的程序的一部分更改一些數據庫設置。Codeigniter - 如何動態更新我的數據庫配置設置?

在我的設置中DATABSE類是自動載入一個配置,它看起來像這樣

$db['default']['hostname'] = 'localhost'; 
$db['default']['username'] = 'root'; 
$db['default']['password'] = '****'; 
$db['default']['database'] = 'database'; 
$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['default']['keyname']值腳本的一部分,我該怎麼辦呢?

回答

2

你應該添加另一組憑據,而不是動態地改變現有的:

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

您可以通過執行加載這個其他數據庫:

$another_db = $this->load->database('another_db', TRUE); 

然後使用它像正常的數據庫驅動程序:

$another_db->select(); 
...etc 
0

略哈克,但你可以添加的東西這樣的系統/數據庫/ DB_driver.php(我用的數據庫密碼更改爲例): -

public function update_pw($value) { 
    $this->password = $value; 
} 

然後在你的項目中,做

$this->db->update_pw('example'); 
$this->db->reconnect(); 

具體取決於你想在配置中改變什麼 - 更重要的是,爲什麼你想改變它 - 這可能是也可能不是最好的選擇。

0

此外,您可以隨時使用全局變量。通常我總是有2個數據庫。一個用於生產,一個用於開發。你只需檢查該變種加載一個或另一個。

該概念可用於在應用程序的一部分中加載一個數據庫,在其他部分中加載其他部分。但是,我會像Brendan指出的那樣使用內置的解決方案。