CodeIgniter: несколько баз данных — доступ к конфигурации базы данных во второй базе данных

Я пытался использовать несколько баз данных с CodeIgniter. Если я заранее знаю, что такое базы данных, я могу установить информацию в файле конфигурации, а затем вызвать любую группу баз данных, которая мне нужна.

Однако в моей ситуации мне нужно хранить эту информацию базы данных в другой базе данных. Это своего рода главная база данных с общей информацией о клиенте, включая базу данных и учетные данные, в которых хранятся данные клиента. Затем этот поставщик может добавлять клиентов в любое время и разделять данные каждого клиента в разных базах данных.

Как я могу установить базу данных и учетные данные на основе значений, которые я получаю из основной базы данных в CodeIgniter, или есть ли способ сделать это?

Может кто-то указать мне верное направление? Спасибо заранее за любые советы.


person spacemunkee    schedule 11.03.2013    source источник
comment
возможный дубликат Codeigniter - несколько подключений к базе данных   -  person cryptic ツ    schedule 12.03.2013


Ответы (4)


Из документов ( https://www.codeigniter.com/user_guide/database/connecting.html):

Первый параметр этой функции можно дополнительно использовать для указания конкретной группы баз данных из вашего конфигурационного файла, или вы даже можете отправить значения подключения для базы данных, которая не указана в вашем конфигурационном файле.

Таким образом, вы должны сделать что-то вроде этого, заменив значения значениями из базы данных master:

$config['hostname'] = "localhost";
$config['username'] = "myusername";
$config['password'] = "mypassword";
$config['database'] = "mydatabase";
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$config['cache_on'] = FALSE;
$config['cachedir'] = "";
$config['char_set'] = "utf8";
$config['dbcollat'] = "utf8_general_ci";

$this->load->database($config);

Если вам нужно поддерживать соединение с базой данных master и базой данных customer, измените последнюю строку на:

$customer_db = $this->load->database($config, TRUE);

// to use the master database:
$this->db->query("SELECT * FROM my_table");

// to then use the customer database:
$customer_db->query("SELECT * FROM whatever");
person swatkins    schedule 11.03.2013
comment
Я полностью пропустил, что вы можете передать массив или строку DSN (я всегда больше всего опасаюсь, когда публикую вопрос здесь). Большое спасибо за ответ! - person spacemunkee; 12.03.2013
comment
Привет, можно ли настроить вторую базу данных после? Итак, я попадаю в свой индекс и получаю некоторые переменные, и я хочу использовать эти переменные для создания другой базы данных. Возможно ли это сделать? - person Alexis Garcia; 23.06.2021

Сделать главную базу данных по умолчанию, а клиент для второй базы данных
$active_group = 'default'; $active_record = ИСТИНА;

    $db['default']['hostname'] = '';
    $db['default']['username'] = '';
    $db['default']['password'] = '';
    $db['default']['dbdriver'] = '';
    $db['default']['dbprefix'] = '';
    $db['default']['pconnect'] = TRUE;
    $db['default']['db_debug'] = TRUE;
    $db['default']['cache_on'] = FALSE;
    $db['default']['cachedir'] = '';
    $db['default']['char_set'] = 'utf8';
    $db['default']['dbcollat'] = 'utf8_general_ci';
    $db['default']['swap_pre'] = '';
    $db['default']['autoinit'] = TRUE;
    $db['default']['stricton'] = FALSE;

    $db['secondDatabase']['hostname'] = '';
    $db['secondDatabase']['username'] = '';
    $db['secondDatabase']['password'] = '';
    $db['secondDatabase']['dbdriver'] = '';
    $db['secondDatabase']['dbprefix'] = '';
    $db['secondDatabase']['pconnect'] = TRUE;
    $db['secondDatabase']['db_debug'] = TRUE;
    $db['secondDatabase']['cache_on'] = FALSE;
    $db['secondDatabase']['cachedir'] = '';
    $db['secondDatabase']['char_set'] = 'utf8';
    $db['secondDatabase']['dbcollat'] = 'utf8_general_ci';
    $db['secondDatabase']['swap_pre'] = '';
    $db['secondDatabase']['autoinit'] = TRUE;
    $db['secondDatabase']['stricton'] = FALSE;

вы можете загрузить вторую базу данных в контроллер или в модель с помощью

$DB2 = $this->load->database('secondDatabase', TRUE); 
person jalborres    schedule 12.03.2013

/** config/database.php **/

$active_group = 'default';
$active_record = TRUE;

$db['default']['hostname'] = '';
$db['default']['username'] = '';
$db['default']['password'] = '';
$db['default']['dbdriver'] = '';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = (ENVIRONMENT !== 'production');
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE; 

/** Ваш контроллер или модель **/

//by default the master database will be loaded and you can directly access db using      $this->db 
   $result = $this->db->query("SELECT * FROM `your_table`")->limit(1)->get()->result();



$config['dbxyz']['hostname'] = $result->hostname;
$config['dbxyz']['username'] = $result->username;
$config['dbxyz']['password'] = $result->password;
$config['dbxyz']['dbdriver'] = '';
$config['dbxyz']['dbprefix'] = '';
$config['dbxyz']['pconnect'] = TRUE;
$config['dbxyz']['db_debug'] = (ENVIRONMENT !== 'production');
$config['dbxyz']['cache_on'] = FALSE;
$config['dbxyz']['cachedir'] = '';
$config['dbxyz']['char_set'] = 'utf8';
$config['dbxyz']['dbcollat'] = 'utf8_general_ci';
$config['dbxyz']['swap_pre'] = '';
$config['dbxyz']['autoinit'] = TRUE;
$config['dbxyz']['stricton'] = FALSE;

//load database config
$this->config->load('database');

//Set database config dynamically        
$this->config->set_item('dbxyz', $config);

//Now you can load the new database using
$this->dbxyz = $this->load->database('dbxyz'); 

ПРИМЕЧАНИЕ. Дополнительные сведения см. в документации Codeigniter класса Config.

person Girish    schedule 12.03.2013

Добавьте строку ниже в application\config\database.php

$db['mydb2']['hostname'] = 'localhost';
$db['mydb2']['username'] = 'root';
$db['mydb2']['password'] = '';
$db['mydb2']['database'] = 'ci2';
$db['mydb2']['dbdriver'] = 'mysql';
$db['mydb2']['dbprefix'] = '';
$db['mydb2']['pconnect'] = TRUE;
$db['mydb2']['db_debug'] = TRUE;
$db['mydb2']['cache_on'] = FALSE;
$db['mydb2']['cachedir'] = '';
$db['mydb2']['char_set'] = 'utf8';
$db['mydb2']['dbcollat'] = 'utf8_general_ci';
$db['mydb2']['swap_pre'] = '';
$db['mydb2']['autoinit'] = TRUE;
$db['mydb2']['stricton'] = FALSE;

Теперь мы используем нашу вторую базу данных в нашем контроллере и модели, как показано ниже.

$CI = &get_instance();
$this->db2 = $CI->load->database('mydb2', TRUE);
$qry = $this->db2->query("SELECT * FROM employee");
print_r($qry->result());

Я взял ссылку с http://www.tutsway.com/use-multiple-db-connections-in-codeigniter.php. У меня это работает.

person Manish    schedule 26.04.2015