Codeigniter - Несколько подключений к базе данных - локальные и удаленные - PullRequest
0 голосов
/ 04 марта 2012

В настоящее время я создаю приложение, в котором пользователь сможет вводить свои собственные соединения с БД для использования данных из своей базы данных MySQL.

Это означает, что у меня будет два соединения с БД - мое локальное (управление сеансамии т. д.) и удаленные пользователи.

Кто-нибудь может посоветовать наилучший способ управления этими двумя соединениями?Я посмотрел на группы БД - http://codeigniter.com/user_guide/database/connecting.html, однако подключение БД пользователей будет установлено с помощью переменных сеанса, поэтому я не могу поместить подробные данные удаленной БД в файл конфигурации.

Я пробовал вручнуюустановка новой группы БД в моем классе, например:

        $db['foreign']['hostname'] = $this->session->userdata('hostname');
        $db['foreign']['username'] = $this->session->userdata('dbuser');
        $db['foreign']['password'] = $this->session->userdata('dbpassword');
        $db['foreign']['database'] = $this->session->userdata('dbname');
        $db['foreign']['dbdriver'] = "mysql";
        $db['foreign']['dbprefix'] = "";
        $db['foreign']['pconnect'] = FALSE;
        $db['foreign']['db_debug'] = TRUE;
        $db['foreign']['cache_on'] = FALSE;
        $db['foreign']['cachedir'] = "";
        $db['foreign']['char_set'] = "utf8";
        $db['foreign']['dbcollat'] = "utf8_general_ci";

        $foreign_db = $this->load->database('foreign', TRUE);

Но я получаю исключение в строке загрузки:

You have specified an invalid database connection group.

Кто-нибудь может посоветовать, как мне этого добиться?

Большое спасибо, Бен.

Ответы [ 3 ]

3 голосов
/ 05 марта 2012

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

Вы хотите что-то вроде этого:

$db['hostname'] = $this->session->userdata('hostname');
$db['username'] = $this->session->userdata('dbuser');
$db['password'] = $this->session->userdata('dbpassword');
$db['database'] = $this->session->userdata('dbname');
$db['dbdriver'] = "mysql";
$db['dbprefix'] = "";
$db['pconnect'] = FALSE;
$db['db_debug'] = TRUE;
$db['cache_on'] = FALSE;
$db['cachedir'] = "";
$db['char_set'] = "utf8";
$db['dbcollat'] = "utf8_general_ci";

$foreign_db = $this->load->database($db, TRUE);
0 голосов
/ 05 марта 2012

вы могли бы использовать ловушку для получения переменных сеанса и заполнения предварительного соединения config vars.

иначе вы могли бы вручную вызвать второй класс БД из контроллеров и использовать класс сеанса для определения деталей?

0 голосов
/ 05 марта 2012

Возможно, что «чужая» группа не известна системе в тот момент, когда вы пытаетесь ее загрузить.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...