这是我的场景。
用户将登录系统。根据用户名,我需要在 codeigniter 配置中设置数据库。
我知道每个模型中的 $this->load->database()
行会加载默认数据库。
那么,在检查session中的用户名后(假设用户已经成功登录),如何动态加载数据库呢?
下面是我正在寻找的东西:
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
本身。可以这样做吗?
最佳答案
我想我找到了解决方案。
这是我遵循的策略:当用户尝试登录时,将使用用户提供的用户名设置 session 变量 $_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*/
请检查此策略,并让我知道这是否正确。
关于mysql - 如何在 CodeIgniter 中有条件地使用不同的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40816953/