动态数据库切换-Codeigniter

时间:2018-10-29 10:44:26

标签: php mysql codeigniter codeigniter-3 codeigniter-2

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

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

数据库配置文件-

<v-card>
  <v-card-title primary-title>
    <div>
      <h3 class="headline mb-0">Ttile</h3>
      <div>Located two hours south of Sydney in the <br>Southern Highlands of New South </div>
    </div>
  </v-card-title>

  <v-card-actions>
    <v-btn left>Share</v-btn>
    <v-spacer />
    <v-btn right>Explore</v-btn>
  </v-card-actions>
</v-card>

控制器-

$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);

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

1 个答案:

答案 0 :(得分:0)

尝试以下示例以动态配置另一个数据库

通用型号

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来获取按组的数据库详细信息,我提取了记录并根据组设置了另一个数据库确保您存储在数据库中的所有数据库配置信息都是加密格式< / strong>使用以下示例在其他数据库上触发查询

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