Соединение с базой данных
Есть два способа соединения с БД.
Автоматическое соединение
Опция "auto connect" будет загружать и инициализировать класс БД при загрузке каждой страницы. Для того, чтобы включить «автосоединение», добавьте слово database в массив $library в следующем файле:
application/config/autoload.php
Ручное соединение
Если только некоторые из ваших страниц требуют соединения с БД, вы можете вручную соединяться с БД, добавив эту строку кода в любую функцию, где это необходимо, или в конструкторе класса, чтобы сделать БД глобально доступной в этом классе.
$this->load->database();
Если функция выше не содержит никакой информации в первом параметре, будет использована группа настроек соединения, указанная в вашем конфигурационном файле. Для большинства случаев это предпочтительный метод использования.
Доступные параметры
- Параметры соединения с БД, переданные в массиве или DSN-строкой.
- TRUE/FALSE (boolean). Возвращать ли идентификатор соединения (смотрите ниже раздел «Соединение с несколькими БД»).
- TRUE/FALSE (boolean). Включать ли класс Active Record. По умолчанию TRUE.
Ручное соединение с БД
Первый параметр этой функции может опционально использоваться для указания конкретной группы настроек БД из конфигурационного файла. Также вы можете передать параметры для соединения, не указанные в конфигурационном файле. Примеры:
Чтобы указать конкретную группу из конфигурационного файла, вы можете сделать так:
$this->load->database('group_name');
Где group_name это имя группы параметров из конфигурационного файла.
Чтобы соединиться вручную с нужной БД, вы можете передать массив с параметрами:
$config['hostname'] = "localhost";
$config['username'] = "myusername";
$config['password'] = "mypassword";
$config['database'] = "mydatabase";
$config['dbdriver'] = "mysql";
$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);
Смотрите информацию о каждом из этих параметров на странице, посвященной конфигурации БД.
Также вы можете передать параметры строкой 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, функция вернет объект БД.
Когда вы соединяетесь таким образом, вы должны использовать собственное имя объекта, а не синтаксис, который приведен в этом руководстве. Другими словами, вместо, например, этого:
$this->db->query();
$this->db->result();
делайте так:
$DB1->query();
$DB1->result();
Пересоединение / Удерживание соединения
Если время ожидания сервера БД превышено, в то время пока вы делали какие-то тяжелые процедуры (обработка изображения, например), вы должны отправить пинг на сервер, используя метод reconnect(), перед тем, как отправлять какие-то запросы. Это поможет вам изящно пересоединиться или удержать соединение.
$this->db->reconnect();
Ручное закрытие соединения
Хотя CodeIgniter интеллигентно заботиться о закрытии соединений, вы все же можете явно закрыть его.
$this->db->close();