2014-03-05 37 views
0

我有一個功能如下: 當任何用戶登錄時我想根據登錄憑證 連接到特定的數據庫。通過基於登錄的codeigniter訪問數據庫

我試着用

$this->db->close(); 
and this->db->reconnect(); 

,但它並沒有幫助

+0

你打算爲不同的用戶連接不同的數據庫嗎? –

+0

在沒有用戶..在登錄頁面我已經給了一年選擇..並根據選擇的年份數據庫名稱連接應設置 – Simone

+0

http://stackoverflow.com/questions/11622872/how-用戶指定的數據庫在codeigniter連接 - 檢查這 –

回答

0

我想通了,我的答案..編碼如下:

在我添加了一個新的數據庫配置的database.php中文件

$db['db2']=$db['default']; 
$db['db2']['database'] = 'new_db2'; 

,然後在所有的模型構造函數我把把下面的代碼:

$new_db = $this->load->database('db2', TRUE); 
$this->db = $new_db; 

所以在這種情況下,我不需要改變我所有的querie秒。歡呼!!! :)

+0

如果你在所有的模型中都有這個,而不是你爲什麼甚至需要原始的配置呢? – Alex

0

在你application/config/database.php您可以定義多個數據庫連接做

$db['database1']['hostname'] = 'localhost'; 
$db['database1']['username'] = 'db1_root'; 
$db['database1']['password'] = 'xxxxxx'; 
$db['database1']['database'] = 'database1_name'; 
$db['database1']['db_debug'] = false; //Important 

$db['database2']['hostname'] = 'localhost'; 
$db['database2']['username'] = 'db2_root'; 
$db['database2']['password'] = 'xxxxxx'; 
$db['database2']['database'] = 'database2_name'; 
$db['database2']['db_debug'] = false; //Important 

然後你就可以加載特定的數據庫做

$database1 = $this->load->database('database1', true); 
$database2 = $this->load->database('database2', true); 

然後,而不是做/不管通過傳遞一個配置數組$this->load->database()

$this->db->query(); 

你需要做的要麼

$database1->query(); 
$database2->query(); 
+0

感謝您的答覆,但我想要更簡單的方法來做到這一點實際上..因爲我已經編碼完整的應用程序..和一個新的功能是以訪問不同的數據庫..所以我必須在這種情況下更改完整的代碼:( – Simone

0

您可以使用您的控制器/模型/庫動態配置連接。

$config['hostname'] = "localhost"; 
$config['username'] = $user_name; 
$config['password'] = $user_password; 
$config['database'] = $user_database; 
$config['dbdriver'] = "mysql"; 
$config['dbprefix'] = ""; 
$config['pconnect'] = FALSE; 
$config['db_debug'] = TRUE; 
$config['cache_on'] = FALSE; 
$config['cachedir'] = ""; 
$config['char_set'] = "utf8"; 
$config['dbcollat'] = "utf8_general_ci"; 

$user_db = $this->load->database($config, true);