2014-03-05 36 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);