Можем ли мы подключиться к базе данных во время выполнения в зависимости от имени пользователя в codeigniter?

Я работаю над проектом, в котором я хочу подключиться к базе данных во время выполнения, в зависимости от имени пользователя. Поскольку я сейчас начинаю свой проект, я хотел опробовать среду воспламенения кода. Но после проведения исследований мне трудно скажи, что это возможно. Еще у меня есть код, чтобы сделать то же самое в стандартном 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;

0

Решение

из документа
Чтобы вручную подключиться к нужной базе данных, вы можете передать массив значений:

$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);
1

Другие решения

Выберите базу данных в run время в codeigniter используя следующее утверждение.

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

Если вы хотите закрыть текущее соединение, используйте

$this->db->close();//closes the current db connection

затем select database Вы потребовали.

0

https://www.codeigniter.com/user_guide/database/connecting.html

Проверьте раздел «Подключение к базе данных вручную», где написано

Чтобы выбрать конкретную группу из вашего конфигурационного файла, вы можете сделать это:

$this->load->database('group_name');

Таким образом, после входа в систему вы можете вызвать соединение с базой данных вручную и выполнить запросы. Я надеюсь, что этого достаточно.

0

Да, вы можете подключить базу данных во время выполнения в 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');
0

Переменная $ 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 позволяют определить, загружать или нет класс активной записи.

0

@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);

это должно решить проблему

0
По вопросам рекламы [email protected]