переопределить имя базы данных для класса базы данных

#codeigniter #codeigniter-2

#codeigniter #codeigniter-2

Вопрос:

Мне нужно прочитать имя базы данных из сеанса (браузера) и использовать это имя для глобального подключения к БД (все функции БД) вместо имени, хранящегося в database.php . Как я должен переопределить / расширить MY_Loader.php чтобы иметь возможность это сделать?

Ответ №1:

Хммм…почему вы хотите это сделать? Я никогда не знал, что это можно сделать. Вы могли бы расширить класс базы данных, чтобы проверить сеанс на имя базы данных, или я бы, возможно, попробовал это;

Перед загрузкой базы данных вы можете загрузить свой сеанс и использовать его для определения конфигурации базы данных;

 $config['hostname'] = $this->session->userdata('db_hostname');
$config['username'] = $this->session->userdata('db_username');
$config['password'] = $this->session->userdata('db_password');
$config['database'] = $this->session->userdata('db_database');
// Now, load the database
$this->load->database($config);
  

Комментарии:

1. это будет работать, когда вы используете его для нескольких функций в контроллере в небольшом приложении. Но для огромной системы это не лучшее решение (повторение кода снова и снова, поэтому это будет беспорядочно)

2. Или добавить это в конструктор библиотеки и загрузить его автоматически?

3. возможно, это должно сработать (я пробовал разные способы, но я сделал что-то не так). Наконец, я поместил извлечение из сеанса непосредственно в config/database.php