Динамическое переключение базы данных - Codeigniter - PullRequest
0 голосов
/ 29 октября 2018

Я хочу переключить свою базу данных 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 Ответ

0 голосов
/ 29 октября 2018

Попробуйте приведенный ниже пример для динамического конфигурирования другой базы данных

общая модель

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...