Получите помощь, поддержку и профессиональное общение в Клубе CodeIgniter

# CodeIgniter User Guide Version 2.1.3

Search User Guide

# Соединение с базой данных

Есть два способа соединения с БД.

## Автоматическое соединение

Опция "auto connect" будет загружать и инициализировать класс БД при загрузке каждой страницы. Для того, чтобы включить «автосоединение», добавьте слово database в массив $library в следующем файле:

`application/config/autoload.php`

## Ручное соединение

Если только некоторые из ваших страниц требуют соединения с БД, вы можете вручную соединяться с БД, добавив эту строку кода в любую функцию, где это необходимо, или в конструкторе класса, чтобы сделать БД глобально доступной в этом классе.

`$this->load->database();`

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

### Доступные параметры

1. Параметры соединения с БД, переданные в массиве или DSN-строкой.
2. TRUE/FALSE (boolean). Возвращать ли идентификатор соединения (смотрите ниже раздел «Соединение с несколькими БД»).
3. 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();`

### Поделиться

Переведено в компании Аринт.

# Спасибо!

Вы тоже можете оказать помощь проекту! Как это сделать?

## Помощь и поддержка

Вы можете задать вопросы и получить ответы и советы от гуру CodeIgniter и веб-разработки: вступайте в Клуб CodeIgniter