$db['default']['hostname'] = "192.168.2.104"; $db['default']['username'] = "webuser"; $db['default']['password'] = "----"; $db['default']['database'] = "vad"; $db['default']['dbdriver'] = "mysql"; $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['stats']['hostname'] = "192.168.2.104"; $db['stats']['username'] = "webuser"; $db['stats']['password'] = "---"; $db['stats']['database'] = "vad_stats"; $db['stats']['dbdriver'] = "mysql"; $db['stats']['dbprefix'] = ""; $db['stats']['pconnect'] = TRUE; $db['stats']['db_debug'] = TRUE; $db['stats']['cache_on'] = FALSE; $db['stats']['cachedir'] = ""; $db['stats']['char_set'] = "utf8"; $db['stats']['dbcollat'] = "utf8_general_ci";
Проблема в том, что я могу определить только конфигурацию: $active_group
, default или stats. Я выполнил документацию CodeIgniter и добавил следующее:
$DB2 = $this->load->database('stats', TRUE);
Таким образом, я подключаюсь ко второй базе данных, но я теряю связь с первой. Кто-нибудь есть идеи о том, как я могу загрузить две базы данных без необходимости делать следующее во всех конструкторах моделей?
$database1 = $this->load->database('database1', TRUE); $database2 = $this->load->database('database2', TRUE);
С Уважением,
Pedro
Вместо того, чтобы применять хак, как упомянуто в Camacho, вы также можете установить флаг «pconnect» в файле database.php для FALSE для всех подключений.
В кодеригенере есть ошибка. Вставка одной строки в класс будет исправлять все это. Вот исходный источник: http://koorb.wordpress.com/2007/11/16/codeigniter-connect-to-multiple-databases/
** Это исправление не относится к PostgreSQL
Вот копия на случай, если сайт опустится.
Номер строки изменился. Вот исправление ошибки от codeigniter:
start bugfix
Описание
все вызовы базы данных поступают в одну и ту же базу данных (последняя инициализирована)
Чтобы исправить проблему, измените функцию simple_query в /system/database/DB_driver.php:
function simple_query($sql) { if ( ! $this->conn_id) { $this->initialize(); } $this->db_select(); //<----------------- Added this line return $this->_execute($sql); }
Это полностью устраняет проблему, поэтому вы можете делать такие вещи в модели
$this->legacy_db = $this->load->database('legacy', true);
В настоящее время codeigniter не может подключаться к нескольким базам данных в постоянном соединении. так что вам следует обратить внимание на ваши связи. вы можете это сделать ..
$db['default']['pconnect'] = FALSE; $db['stats']['pconnect'] = FALSE;
Я исправляю проблему изменения DB_driver.php на фреймворке.
В этой функции я добавляю $this->db_select();
и вы никогда не потеряете соединение снова при работе с 2 базами данных.
function simple_query($sql) { if ( ! $this->conn_id) { $this->initialize(); } $this->db_select(); return $this->_execute($sql); }
Вы можете попробовать изменить функцию CI_Session () в файле session.php.
замещать
$this->CI->load->database();
с этим
$this->CI->db1 = $this->CI->load->database('default', TRUE); $this->CI->db2 = $this->CI->load->database('db2', TRUE);
Таким образом, вам не нужно загружать 2 dbs во все файлы модели, но использовать их напрямую с помощью объектов.
$ this-> db1 будет обращаться к группе по умолчанию db, а $ this-> db2 будет обращаться к db2 group db. (обе группы db должны быть определены в database.php)
Сундар
Вам не нужно создавать отдельные конфигурации базы данных, если вам нужно использовать другую базу данных в одном и том же соединении. Вы можете переключиться на другую базу данных, когда вам нужно, например:
$ This-> db-> db_select (database2_name $);
Руководство пользователя CodeIgbiter