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

标签 mysql database codeigniter

这是我的场景。 用户将登录系统。根据用户名,我需要在 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/

相关文章:

php - Azure 是否支持运行 Laravel 5.5 的正确 PHP 版本?

mysql - SQL MIN 无法正常工作

sql-server - 当我有一个很大的 ID 列表时,我将如何在 SQL Server 中创建一个临时表

mysql - 从old_text列获取特定页面内容

php - 页脚脚本在 codeigniter 中不起作用

php - 管理 Codeigniter 分页

mysql - 使用内连接从查询中返回最小值

恢复复制后 Master 上的 MySql 复制性能

php - 基于引用表值连接表

sql-server - 使用索引加速 SQL 查询