Intereting Posts
Как получить доступ к ресурсам в папке приложения? Как проверить целочисленные значения, чтобы избежать SQL-инъекций? PHP: цикл while не работает после настройки SELECT для предотвращения инъекций SQL Реализация фасада перед классом Factory Laravel 5.4 Поменяйте значение двух переменных без использования третьей переменной в php Как установить свойство «FROM» с помощью Swiftmailer с Gmail? Преобразование записи MySQL в строку JSON в PHP Ошибка декодирования изображения в PHP: «Данные не в распознанном формате» Laravel 5.3 – Одиночное уведомление для пользовательской коллекции (последователи) Возвращаемый ответ от PHP в Jquery с использованием Ajax неправильный заголовок из сценария. Плохой заголовок = 1: index.php Проверка номера телефона в php codeigniter Получение кода и phpunit для работы с MAMP с OS X Lion WooCommerce – добавление категории товаров в таблицу заказов PHP: strtotime возвращает false для будущей даты?

Codeigniter – использование нескольких баз данных

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 , 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