Spec-Zone.ru › CodeIgniter 4

Настройка базы данных

  • Настройка с файлом .env
  • Описание значений:

В CodeIgniter есть конфигурационный файл, позволяющий хранить значения подключения к базе данных (имя пользователя, пароль, имя базы данных и т. д.). Файл конфигурации находится по адресу app/Config/Database.php. Вы также можете задать значения подключения к базе данных в файле .env. Более подробная информация ниже.

Настройки конфигурации хранятся в свойстве класса, которое представляет собой массив с таким прототипом:

public $default = [
    'DSN'      => '',
    'hostname' => 'localhost',
    'username' => 'root',
    'password' => '',
    'database' => 'database_name',
    'DBDriver' => 'MySQLi',
    'DBPrefix' => '',
    'pConnect' => true,
    'DBDebug'  => true,
    'charset'  => 'utf8',
    'DBCollat' => 'utf8_general_ci',
    'swapPre'  => '',
    'encrypt'  => false,
    'compress' => false,
    'strictOn' => false,
    'failover' => [],
];

Имя свойства класса — имя подключения, которое можно использовать при подключении для указания имени группы.

Примечание

По умолчанию база данных SQLite3 расположена в папке writable. Если вы хотите изменить расположение, необходимо указать полный путь к новой папке.

Некоторые драйверы баз данных (например, PDO, PostgreSQL, Oracle, ODBC) могут потребовать предоставления полной строки DSN. В этом случае следует использовать настройку «DSN», как если бы вы использовали базовый родной PHP-расширение драйвера, например так:

// PDO
$default['DSN'] = 'pgsql:host=localhost;port=5432;dbname=database_name';

// Oracle
$default['DSN'] = '//localhost/XE';

Примечание

Если для драйвера, которому требуется DSN, вы не укажете строку DSN, CodeIgniter попытается создать её на основе предоставленных настроек.

Вы также можете задать Имя источника данных универсальным способом (в формате URL). В этом случае DSN должны иметь такой прототип:

$default['DSN'] = 'DBDriver://username:password@hostname:port/database';

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

// MySQLi
$default['DSN'] = 'MySQLi://username:password@hostname:3306/database?charset=utf8&DBCollat=utf8_general_ci';
// Postgre
$default['DSN'] = 'Postgre://username:password@hostname:5432/database?charset=utf8&connect_timeout=5&sslmode=1';

Примечание

Если вы предоставите строку DSN, в которой отсутствуют некоторые действительные настройки (например, кодировка символов базы данных), которые присутствуют в других полях конфигурации, CodeIgniter добавит их.

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

$default['failover'] = [
    [
        'hostname' => 'localhost1',
        'username' => '',
        'password' => '',
        'database' => '',
        'DBDriver' => 'MySQLi',
        'DBPrefix' => '',
        'pConnect' => true,
        'DBDebug'  => true,
        'charset'  => 'utf8',
        'DBCollat' => 'utf8_general_ci',
        'swapPre'  => '',
        'encrypt'  => false,
        'compress' => false,
        'strictOn' => false,
    ],
    [
        'hostname' => 'localhost2',
        'username' => '',
        'password' => '',
        'database' => '',
        'DBDriver' => 'MySQLi',
        'DBPrefix' => '',
        'pConnect' => true,
        'DBDebug'  => true,
        'charset'  => 'utf8',
        'DBCollat' => 'utf8_general_ci',
        'swapPre'  => '',
        'encrypt'  => false,
        'compress' => false,
        'strictOn' => false,
    ]
];

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

Вы можете необязательно хранить несколько наборов значений подключения. Например, если вы запускаете несколько сред (разработки, производства, тестирования и т. д.) в рамках одной установки, вы можете настроить группу подключений для каждой из них, а затем переключаться между группами по мере необходимости. Например, чтобы настроить среду «test», сделайте так:

public $test = [
    'DSN'      => '',
    'hostname' => 'localhost',
    'username' => 'root',
    'password' => '',
    'database' => 'database_name',
    'DBDriver' => 'MySQLi',
    'DBPrefix' => '',
    'pConnect' => true,
    'DBDebug'  => true,
    'charset'  => 'utf8',
    'DBCollat' => 'utf8_general_ci',
    'swapPre'  => '',
    'compress' => false,
    'encrypt'  => false,
    'strictOn' => false,
    'failover' => []
);

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

$defaultGroup = 'test';

Примечание

Имя «test» произвольное. Вы можете выбрать любое имя. По умолчанию для основного подключения используется слово «default», но его также можно переименовать на что-то более релевантное вашему проекту.

Вы можете изменить файл конфигурации, чтобы определить среду и автоматически обновить значение defaultGroup на правильное, добавив необходимую логику в конструктор класса:

class Database
{
    public $development = [...];
    public $test        = [...];
    public $production  = [...];

    public function __construct()
    {
        $this->defaultGroup = ENVIRONMENT;
    }
}

Настройка с файлом .env

Вы также можете сохранить значения конфигурации в файле .env с текущими настройками базы данных сервера. Вам нужно вводить только те значения, которые отличаются от значений в настройках группы по умолчанию. Значения должны быть именами, следующими этому формату, где default — имя группы:

database.default.username = 'root';
database.default.password = '';
database.default.database = 'ci4';

Как и при всех других

Описание значений:

Имя конфигурации Описание
dsn Строка подключения DSN (последовательность конфигурации "все в одном").
hostname Имя хоста вашего сервера базы данных. Часто это «localhost».
username Имя пользователя, используемое для подключения к базе данных.
password Пароль, используемый для подключения к базе данных.
database Имя базы данных, к которой вы хотите подключиться.
DBDriver Тип базы данных. Например: MySQLi, Postgre и т. д. Регистр должен соответствовать имени драйвера
DBPrefix Необязательное префикс таблиц, который будет добавлен к имени таблицы при выполнении запросов Query Builder. Это позволяет нескольким установкам CodeIgniter использовать одну базу данных.
pConnect true/false (логическое значение) — использовать ли постоянное подключение.
DBDebug true/false (логическое значение) — показывать ли ошибки базы данных.
charset Кодировка символов, используемая при общении с базой данных.
DBCollat

Коллирование символов, используемое при общении с базой данных

Примечание

Используется только в драйвере «MySQLi».

swapPre Префикс таблиц по умолчанию, который следует заменить на dbprefix. Это полезно для распределенных приложений, где вы можете выполнять запросы, написанные вручную, и вам нужно, чтобы префикс оставался настраиваемым конечным пользователем.
schema Схема базы данных, значение по умолчанию зависит от драйвера. Используется драйверами PostgreSQL и SQLSRV.
encrypt

Использовать ли зашифрованное подключение.

  • Драйверы «sqlsrv» и «pdo/sqlsrv» принимают true/false
  • Драйверы «MySQLi» и «pdo/mysql» принимают массив со следующими параметрами:

    • ‘ssl_key’ — путь к файлу закрытого ключа
    • ‘ssl_cert’ — путь к файлу сертификата открытого ключа
    • ‘ssl_ca’ — путь к файлу сертификата уполномоченной организации
    • ‘ssl_capath’ — путь к каталогу, содержащему сертификаты авторитетных центров сертификации в формате PEM
    • ‘ssl_cipher’ — список разрешённых шифров, используемых для шифрования, разделенные двоеточием (':')
    • ‘ssl_verify’ — true/false; проверять ли сертификат сервера или нет (только для «MySQLi»)
compress Использовать ли сжатие клиента (только для MySQL).
strictOn true/false (логическое значение) — принудительно ли использовать «жесткий режим» подключений, хорошо подходит для обеспечения строгого SQL при разработке приложения.
port

Порт базы данных. Чтобы использовать это значение, необходимо добавить строку в массив конфигурации базы данных.

$default['port'] = 5432;

Примечание

В зависимости от используемой платформы базы данных (MySQL, PostgreSQL и т. д.) не все значения будут необходимы. Например, при использовании SQLite не нужно указывать имя пользователя или пароль, а имя базы данных будет путём к вашему файлу базы данных. Приведённая выше информация предполагает использование MySQL.

© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/user_guide/database/configuration.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API