Подтвердить что ты не робот

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, значение по умолчанию или статистика. Я выполнил документацию CodeIgniter и добавил следующее:

$DB2 = $this->load->database('stats', TRUE);

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

$database1 = $this->load->database('database1', TRUE);
$database2 = $this->load->database('database2', TRUE); 

Привет,

Педро

4b9b3361

Ответ 1

Вместо применения взлома, упомянутого в Camacho, вы также можете установить флаг "pconnect" в файле database.php для FALSE для всех подключений.

Ответ 2

В кодеригенере есть ошибка. Вставка одной строки в класс будет исправлять все это. Вот исходный источник: 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);

Ответ 3

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

$db['default']['pconnect'] = FALSE;

$db['stats']['pconnect'] = FALSE;

Ответ 4

Я исправляю проблему с изменением DB_driver.php на фреймворке.

В этой функции я добавляю $this->db_select();, и вы никогда не потеряете свое соединение при работе с 2 базами данных.

function simple_query($sql)
{
    if ( ! $this->conn_id)
    {
        $this->initialize();
    }

    $this->db_select();

    return $this->_execute($sql);
}

Ответ 5

Вы можете попробовать изменить функцию 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)


Сундара

Ответ 6

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

$this- > db- > db_select ($ database2_name);

Руководство пользователя CodeIgbiter