Подключения к базе
Соединение с базой данных конфигурируется в секции connections файла .settings.php, где задаются параметры драйвера, флаги отложенного подключения и кодировка utf8mb4. Платформа поддерживает работу с несколькими базами через именованные подключения (Application::getConnection('name')), однако транзакции всегда изолированы в рамках одного конкретного соединения.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
Настройки в .settings.php
-
2
Несколько подключений
-
3
Кодировка и коллация
Материалы
Официальная документация
Проверь себя
После переезда на новый сервер в отзывах вместо emoji вопросительные знаки, хотя дамп снят в utf8mb4 и PHP в UTF-8. Где искать?
В кодировке соединения, а не базы: ключ charset подключения в .settings.php и SQL-команды в /bitrix/php_interface/after_connect_d7.php. Старый SET NAMES utf8 там переключает соединение в трёхбайтовый utf8, и четырёхбайтовые символы теряются при записи.
Чем options => 2 у подключения отличается от 0 и когда это заметно?
2 — Connection::DEFERRED: соединение устанавливается при первом запросе, а не при создании объекта. При 0 ядро подключается сразу. Заметно на ошибке подключения: с DEFERRED она вылетает там, где выполнился первый запрос.
Сущность аналитики привязана ко второму подключению. Почему транзакция на default не откатывает её изменения?
Транзакция живёт в пределах одного соединения. DataManager::getConnectionName() отправляет запросы сущности в другое, и startTransaction() на default его не касается. Открывать транзакцию нужно на том Connection, куда пишет сущность.
Зачем readonly => true у секции connections, если файл и так лежит вне веб-доступа?
Флаг запрещает менять параметры секции во время выполнения через Configuration::setValue(). Без него любой код на хите может подменить хост или логин, и это никак не залогируется.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить