Многие веб-разработчики, работающие с движком 1С-Битрикс, при проверке системы сталкивались с сообщением:
Ошибка! Переменная sql_mode в MySQL должна быть пустая, текущее значение...
В этой статье мы разберём причины возникновения ошибки, а также шаг за шагом покажем, как её устранить с практическими примерами кода.
Почему возникает ошибка SQL_MODE?
Параметр `sql_mode` определяет режим работы MySQL. Некоторые значения этой переменной, например, `STRICT_TRANS_TABLES` или `ONLY_FULL_GROUP_BY`, могут быть несовместимы с CMS 1С-Битрикс. В результате возникают многочисленные некорректные поведения, либо полностью работоспособность части функционала сайта.
Пример ошибки в проверке системы Битрикс:
Ошибка! Переменная sql_mode в MySQL должна быть пустая, текущее значение: STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
Как исправить ошибку sql_mode?
Шаг 1. Переходим к редактированию файлов инициализации
Битрикс позволяет "подлечить" параметры соединения с БД через дополнительные файлы. Нам нужны два файла:
- `/bitrix/php_interface/after_connect_d7.php`
- `/bitrix/php_interface/after_connect.php`
Если файлов нет — создаем их с правами доступа, как и у других файлов в папке.
Шаг 2. Исправляем after_connect_d7.php
Это файл для нового D7 ядра Bitrix.
Открываем или создаём файл:
- `/bitrix/php_interface/after_connect_d7.php`
Вставляем код:
$connection = Bitrix\Main\Application::getConnection();
$connection->queryExecute("SET sql_mode=''");
⚠️ В большинстве проектов строка с получением `$connection` уже присутствует. Важно добавить только команду установки sql_mode!
Шаг 3. Исправляем after_connect.php
Это файл для "старого" подключения Битрикса к базе данных.
Открываем или создаём файл:
- `/bitrix/php_interface/after_connect.php`
Вставляем код:
$DB->Query("SET sql_mode=''");
Шаг 4. Сохраняем изменения и проверяем результат
- Сохраняем оба файла.
- Запускаем повторную проверку системы через административный раздел Битрикса ("Проверка системы").
- Обнаруживаем, что ошибка исчезла!
Почему нельзя просто поменять sql_mode в настройках MySQL?
Иногда администраторы меняют этот параметр в конфигурации MySQL (`my.cnf` или через глобальные переменные). Но на хостингах (особенно виртуальных) часто не дают такой возможности. Поэтому самостоятельная команда `SET sql_mode=''` при каждом подключении — самый универсальный и рабочий способ для проектов на Bitrix.