动态数据库开关 - 笨(Dynamic Database Switch - Codeigniter)

2019-10-30 12:26发布

我想切换运行时我笨多个数据库。 我的默认数据库将全面运行的页面,但是当我需要切换到基于情景或要求其他数据库,然后我可以做的。 常见模型功能将会为所有不同的数据库。 所以,我想使用多个数据库连接相同型号和相同功能的使用动态选择不使用会话或没有经过函数变量

要做到这一点我设置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();
   }

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

Answer 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;
}

在上面的例子,我有一个通过传递的GroupId我取的记录,并设置另一个数据库根据组确保您存储在数据库中的所有数据库配置信息是加密的例子下面的格式使用火查询上有一群聪明的数据库的详细信息group_master表其他数据库

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


文章来源: Dynamic Database Switch - Codeigniter