Ответ 1
Вместо применения взлома, упомянутого в Camacho, вы также можете установить флаг "pconnect" в файле database.php для FALSE для всех подключений.
database.php
$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
, значение по умолчанию или статистика. Я выполнил документацию CodeIgniter и добавил следующее:
$DB2 = $this->load->database('stats', TRUE);
Таким образом, я подключаюсь ко второй базе данных, но я теряю связь с первой. Кто-нибудь есть идеи о том, как я могу загрузить две базы данных без необходимости делать следующее во всех конструкторах моделей?
$database1 = $this->load->database('database1', TRUE);
$database2 = $this->load->database('database2', TRUE);
Привет,
Педро
Вместо применения взлома, упомянутого в 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);