这是我的情景。
用户将登录系统。根据用户名,我需要在codeigniter配置中设置数据库。
我知道每个模型中的行$this->load->database()
加载默认数据库。
因此,在检查会话中的用户名(假设用户已成功登录)后,如何动态加载数据库?
以下是我要找的东西:
if(username == 'foo'){
$this->load->database('database_name');
}
我编写的模型函数示例如下:
public function check_valid_login($username, $password){
$this->db->from('tbl_user_details');
$this->db->where('email_address', $username);
$this->db->where('password', md5($password));
$query = $this->db->get();
$rowcount = $query->num_rows();
return $rowcount ;
}
在选择数据库时,我如何仍然使用$this->db->from('tbl_user_details');
等语句。即,我想使用$this->db
本身。有可能吗?
答案 0 :(得分:0)
我想我找到了解决方案。
这是我遵循的策略:当用户尝试登录时,会话变量$_SESSION['dynamic_db_username']
设置为用户提供的用户名。
以下逻辑用于动态选择数据库。以下代码以config/database.php
/*Dynamic database selection - begins*/
if(!empty($_SESSION['dynamic_db_username'])){
$dynamic_db_username = $_SESSION['dynamic_db_username'];
if($dynamic_db_username == 'sample@domain.com')
{
$db['default']['database'] = 'database_1';
}
elseif($dynamic_db_username == 'sample2@domain.com')
{
$db['default']['database'] = 'database_2';
}
else
{
$db['default']['database'] = 'database_1';
}
}
else
{
$db['default']['database'] = 'database_1';
}
/*End*/
请审核此策略,如果这是正确的,请告诉我。
答案 1 :(得分:0)
在config文件夹中有一个名为autoload.php的文件 打开文件
首先找到以下代码
$autoload['libraries'] = array('');
你必须把“数据库”放在数组中,改变代码就好像
$autoload['libraries'] = array('database');
之后,您可以随时随地使用您的数据库而无需手动加载。