如何在CodeIgniter中有条件地使用不同的数据库

时间:2016-11-26 09:43:50

标签: mysql database codeigniter

这是我的情景。 用户将登录系统。根据用户名,我需要在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本身。有可能吗?

2 个答案:

答案 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');

之后,您可以随时随地使用您的数据库而无需手动加载。