Подключение к базе данных
Существует два способа подключения к базе данных:
Автоматическое Подключение
Свойство “auto connect” будет загружать и инициализировать класс базы данных при каждой загрузке страницы. Для активации “auto connecting”, добавьте слово database в массив библиотеки как указано в следующем файле:
application/config/autoload.php
Подключение Вручную
Если требуют подключения к базе данных только некоторые страницы, Вы можете вручную подключиться к вашей базе данных добавив следующую строку кода в любой функции, где это необходимо или в классе конструктора, чтобы сделать базу данных доступной во всем классе.
$this->load->database();
Если приведенная выше функция НЕ содержит какой-либо информации в качестве первого параметра, она будет подключаться к группе указанной в базе данных конфигурационного файла. Для большинства людей этот способ использования предпочтительный.
Доступные Параметры
- Значения подключения к базе данных передаются либо в виде массива либо DSN строкой.
- TRUE/FALSE (булев). Нужно ли возвращать ID подключения (см. подключение к нескольким базам данных ниже).
- TRUE/FALSE (булев). Включение класса Построителя запросов (Query Builder). Установлен в TRUE по умолчанию.
Подключение к базе данных вручную
Первый параметр этой функции может выборочно используется для указания определенной группы базы данных из файла config или вы даже можете представить значения подключения для базы данных не указанные в файле config. Примеры:
To choose a specific group from your config file you can do this:
$this->load->database('group_name');
Где group_name имя группы подключения из файла конфигурации.
Для подключения к нужной базе данных вручную, можно передать массив значений:
$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);
Для получения информации о каждом из этих значений см. страницу настроек.
Примечание
Для PDO драйвера, следуеют использовать $config[‘dsn’] параметр вместо ‘hostname’ и ‘database’:
Или вы можете представить свои значения базы данных как Data Source Name. DSN должен быть следующим:
$dsn = 'dbdriver://username:password@hostname/database';
$this->load->database($dsn);
Чтобы переопределить значения по умолчанию при подключении со строкой DSN, добавьте конфигурационные переменные в строке запроса.
$dsn = 'dbdriver://username:password@hostname/database?char_set=utf8&dbcollat=utf8_general_ci&cache_on=true&cachedir=/path/to/cache';
$this->load->database($dsn);
Подключение к нескольким базам данных
Если вам нужно подключиться более чем к одной базе данных одновременно, вы можете сделать это следующим образом:
$DB1 = $this->load->database('group_one', TRUE);
$DB2 = $this->load->database('group_two', TRUE);
Примечание: Замениете слова “group_one” и “group_two” на конкретные названия групп, к которым вы подключаетесь (или вы можете передать значения подключения как указано выше).
Установив второй параметр в TRUE (булев) функция вернет объект базы данных.
Примечание
При подключении таким образом, вы будете использовать имя объекта для выполнения команд, а не синтаксис, используемый в данном руководстве. Другими словами, вместо выполнения команд:
Примечание
Вам не нужно создавать отдельные конфигурации базы данных если вам нужно использовать другую базу данных в том же соединении. Вы можете переключиться на другую базу данных, когда вам нужно, таким образом:
Переподключение / поддерживание соединения постоянно
Если время ожидания сервера базы данных превышено, пока вы делаете некоторые сложные РНР операции (обработка изображения например), вы должны рассмотреть возможность пинговать сервер с помощью метода reconnect() перед отправкой дальнейших запросов, который может корректно поддерживать соединение или восстановить его.
$this->db->reconnect();