动态数据库切换 - Codeigniter

Posted

技术标签:

【中文标题】动态数据库切换 - Codeigniter【英文标题】:Dynamic Database Switch - Codeigniter 【发布时间】:2019-04-02 06:49:48 【问题描述】:

我想在运行时切换我的 codeigniter 多个数据库。我的默认数据库将彻底运行该页面,但是当我需要根据场景或要求切换到其他数据库时,我可以这样做。 通用模型函数适用于所有不同的数据库。 所以,我想在不使用会话或不传递函数变量的情况下,使用动态选择器对多个数据库连接使用相同的模型和相同的函数

为了实现这一点,我在 cofig 中设置了一个名称,当我调用我的模型时,我在调用模型之前在控制器中设置了所需的数据库名称,然后我尝试在控制器中设置的模型中获取名称。但不幸的是,我没有从控制器到模型的名称。

数据库配置文件 -

$db['default'] = array(
               'dsn'    => '',
               'hostname' => 'localhost',
               'username' => 'root',
               'password' => 'pass'
               'database' => 'db1'
                .......
               );


$db['anotherDB'] = array(
               'dsn'    => '',
               'hostname' => 'localhost',
               'username' => 'root',
               'password' => 'pass'
               'database' => 'db2'
                .......
               );

控制器 -

$this->config->set_item('active_db', 'anotherDB');
$sql = 'select * from user';
$anotherDB_record = $this->model->customQuery($sql);

print_r($anotherDB_record);


$this->config->set_item('active_db', 'default');
$sql = 'select * from customer';
$default_record = $this->model->customQuery($sql);

print_r($default_record);

模式 -

   protected $database;
   function __construct() 
       parent::__construct();
       $oDB = $this->config->item('active_db');
       $this->database = $this->load->database($oDB, TRUE);
       
   function customQuery($sql)
       $query = $this->database->query( $sql );
       return $query->result();
   

这是我尝试切换数据库的方式。如果你们有任何其他最佳解决方案来切换多个数据库,请随时向我提出建议。

【问题讨论】:

【参考方案1】:

尝试下面的例子来动态配置另一个数据库

普通型号

function getOtherDB($groupID) 
    $getRecord = $this->common_model->getRow('group_master', 'GroupID', $groupID);
    if ($getRecord) 
        $config['database'] = $getRecord->DBName;
        $config['hostname'] = $getRecord->DBHostIP;
        $config['username'] = $getRecord->DBHostUName;
        $config['password'] = $getRecord->DBHostPassw;
        $config['dbdriver'] = "mysqli";
        $config['dbprefix'] = "";
        $config['pconnect'] = FALSE;
        $config['db_debug'] = TRUE;
        $DB2 = $this->load->database($config, TRUE);
        if ($DB2) 
            return $DB2;
        
    
    return FALSE;

在上面的例子中,我有 group_master 表,它通过传递 GroupId 具有分组数据库详细信息我获取记录并根据组设置另一个数据库 确保存储在数据库中的所有数据库配置信息都是加密格式 使用以下示例在其他数据库上触发查询

$result = $DB2->query("select * from group");
// $DB2 is other database instance you can create multiple db connection using above methos

【讨论】:

以上是关于动态数据库切换 - Codeigniter的主要内容,如果未能解决你的问题,请参考以下文章

codeigniter 动态数据模板

Codeigniter 将多个输入字段动态插入到数据库中?

在 Codeigniter 中动态加载数据库连接数据

使用 javascript (codeigniter) 以动态形式将 PHP 导入数据库

使用 Codeigniter 以表格形式填充动态数据

从codeigniter中的数据库查询向视图添加动态数据时未定义的变量[重复]