Блог Горошко Андрея 1C-Битрикс Кросс-платформенные SQL-запросы Возможности Bitrix\Main\DB\SqlHelper

Кросс-платформенные SQL-запросы Возможности Bitrix\Main\DB\SqlHelper

Если вы пишете «сырые» 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 битрикс, кросс-платформенность.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Добавить комментарий

Related Post

Интеграция 1С-Битрикс с Calltouch (Коллтач) и CallibriИнтеграция 1С-Битрикс с Calltouch (Коллтач) и Callibri

Бесшовная интеграция сайта на 1С-Битрикс с внешними системами — это ключевое условие автоматизации продаж и масштабирования бизнеса. Услуга «Интеграция 1С-Битрикс с Calltouch (Коллтач) и Callibri» обеспечивает динамический коллтрекинг, отслеживание звонков,

Как использовать D7element() в 1С-Битрикс: пример кодаКак использовать D7element() в 1С-Битрикс: пример кода

Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Как использовать D7element() в 1С-Битрикс: пример кода». Вы узнаете экспертные методики работы с

Обновить свойство отгрузки sale.shipmentproperty.updateОбновить свойство отгрузки sale.shipmentproperty.update

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Обновить свойство отгрузки sale.shipmentproperty.update», проанализируем лучшие практики и