Я работаю над проектом, в котором я хочу подключиться к базе данных во время выполнения, в зависимости от имени пользователя. Поскольку я сейчас начинаю свой проект, я хотел опробовать среду воспламенения кода. Но после проведения исследований мне трудно скажи, что это возможно. Еще у меня есть код, чтобы сделать то же самое в стандартном PHP. Но я хотел попробовать рамки, прежде чем идти на такой подход.
У меня есть код для нескольких (2 базы данных) подключения.
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'test1';
$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['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
//Another database connection.
$db['db2']['hostname'] = 'localhost';
$db['db2']['username'] = 'root';
$db['db2']['password'] = '';
$db['db2']['database'] = 'test2';
$db['db2']['dbdriver'] = 'mysql';
$db['db2']['dbprefix'] = '';
$db['db2']['pconnect'] = FALSE;
$db['db2']['db_debug'] = TRUE;
$db['db2']['cache_on'] = FALSE;
$db['db2']['cachedir'] = '';
$db['db2']['char_set'] = 'utf8';
$db['db2']['dbcollat'] = 'utf8_general_ci';
$db['db2']['swap_pre'] = '';
$db['db2']['autoinit'] = TRUE;
$db['db2']['stricton'] = FALSE;
из документа
Чтобы вручную подключиться к нужной базе данных, вы можете передать массив значений:
$config['hostname'] = 'localhost';
$config['username'] = 'myusername';
$config['password'] = 'mypassword';
$config['database'] = 'mydatabase';
$config['dbdriver'] = 'mysqli';
$config['dbprefix'] = '';
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$config['cache_on'] = FALSE;
$config['cachedir'] = '';
$config['char_set'] = 'utf8';
$config['dbcollat'] = 'utf8_general_ci';
$this->load->database($config);
Выберите базу данных в run
время в codeigniter
используя следующее утверждение.
$this->db->db_select('database2_name');
Если вы хотите закрыть текущее соединение, используйте
$this->db->close();//closes the current db connection
затем select
database
Вы потребовали.
https://www.codeigniter.com/user_guide/database/connecting.html
Проверьте раздел «Подключение к базе данных вручную», где написано
Чтобы выбрать конкретную группу из вашего конфигурационного файла, вы можете сделать это:
$this->load->database('group_name');
Таким образом, после входа в систему вы можете вызвать соединение с базой данных вручную и выполнить запросы. Я надеюсь, что этого достаточно.
Да, вы можете подключить базу данных во время выполнения в codeigniter.
По умолчанию, если вы не укажете имя базы данных, она примет базу данных по умолчанию
$db['default']['hostname'] = 'localhost';
и если вы укажете конкретное имя
$db['db2']['hostname'] = 'localhost';
Как это $this->load->database('db2', TRUE);
Я сделал то же самое в одном из моих проектов, вы можете создать таблицу (если вы хотите динамический), в которой вы можете хранить все имя базы данных в соответствии с логином пользователя.
Таким образом, при подключении к базе данных в модели, во-первых, вам нужно получить имя базы данных из таблицы, которую вы создаете, используя логин пользователя, основываясь на том, что вы можете сделать что-то вроде этого
Здесь $ dbname — это имя вашей базы данных, которое мы нашли по запросу к базе данных по умолчанию.
$admin_db= $this->load->database($dbname, TRUE);
$q = $admin_db->get('Tablename');
Переменная $ active_group позволяет вам выбрать, какую группу соединений сделать активной. По умолчанию существует только одна группа (группа по умолчанию).
$active_group = 'default';
$active_record = TRUE;
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'test1';
$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['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
Переменные $ active_record позволяют определить, загружать или нет класс активной записи.
@Pratima в соответствии с вашим комментарием к Yahia Bat, вы хотите динамически получить информацию о базе данных из некоторой таблицы, а затем подключиться к базе данных. Для этого вы должны заполнить $ config или любой другой массив требуемыми данными из базы данных и подключиться соответствующим образом.
$config['hostname'] = '<<value from database table>>';
$config['username'] = '<<value from database table>>';
$config['password'] = '<<value from database table>>';
$config['database'] = '<<value from database table>>';
$config['dbdriver'] = 'mysqli';
$config['dbprefix'] = '';
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$config['cache_on'] = FALSE;
$config['cachedir'] = '';
$config['char_set'] = 'utf8';
$config['dbcollat'] = 'utf8_general_ci';
$this->load->database($config);
это должно решить проблему