Если вы пишете «сырые» SQL-запросы (через $connection->query), вы рискуете привязаться к конкретной базе данных (обычно MySQL). SqlHelper — это абстракция, которая генерирует правильный SQL-синтаксис для текущей активной БД.
Получить хелпер можно так:
$connection = \Bitrix\Main\Application::getConnection();
$helper = $connection->getSqlHelper();1. Экранирование данных (forSql)
Защита от SQL-инъекций.
$userInput = "O'Reilly";
$safeInput = $helper->forSql($userInput);
$sql = "SELECT * FROM b_user WHERE LAST_NAME = '" . $safeInput . "'";2. Работа с датами в SQL
Разные БД по-разному работают с датами.
- getCurrentDateTimeFunction(): Возвращает функцию текущего времени (NOW(), SYSDATE).
- getDateToCharFunction($field): Преобразует поле даты в строку.
- addSecondsToDateTime($seconds): Добавляет секунды к текущему времени.
$sql = "UPDATE my_table SET DATE_UPDATE = " . $helper->getCurrentDateTimeFunction();3. Лимиты и отступы (getTopSql)
В MySQL это LIMIT, в Oracle — ROWNUM. Хелпер решает эту проблему.
$sql = "SELECT * FROM b_user ORDER BY ID DESC";
$sqlWithLimit = $helper->getTopSql($sql, 10); // Вернет SQL с ограничением в 10 записей4. Подготовка обновлений (prepareAssignment)
Генерирует строку FIELD = ‘VALUE’, FIELD2 = ‘VALUE2’ для UPDATE запросов.
$fields = [
'NAME' => 'New Name',
'SORT' => 500,
'DESCRIPTION' => "Text' with quote"
];
// Автоматически экранирует значения и формирует строку
$updateString = $helper->prepareAssignment('b_iblock_element', $fields);
$sql = "UPDATE b_iblock_element SET " . $updateString . " WHERE ID = 1";5. INSERT IGNORE (getInsertIgnore)
// Вернет "INSERT IGNORE INTO" для MySQL или аналог для других БД
$sql = $helper->getInsertIgnore("my_table", " (ID, NAME) VALUES (1, 'Test')");Вывод:
Даже если вы используете только MySQL, привычка использовать SqlHelper (особенно forSql и prepareAssignment) делает ваш код безопаснее и чище.
Если же вы разрабатываете тиражные решения для Маркетплейса, использование SqlHelper обязательно для совместимости с разными окружениями (включая PostgreSQL, поддержка которого активно внедряется).
SqlHelper, getSqlHelper, forSql, getQueryDate, getInsertIgnore, prepareAssignment, экранирование SQL битрикс, кросс-платформенность.