Метод Fetch()
Метод Fetch() предназначен для получения очередной строки результата запроса без дополнительной обработки данных.
Основные характеристики:
- Возвращает ассоциативный массив, соответствующий данным в базе данных.
- Не выполняет HTML-экранирование.
- Не декодирует HTML-сущности.
- Не добавляет дополнительные поля.
- Работает быстрее по сравнению с GetNext().
- Возвращаемые данные:
- Все значения возвращаются в виде строк.
- Данные соответствуют значениям, сохранённым в базе данных.
Назначение:
Метод рекомендуется использовать в серверной логике, обработчиках, API, при формировании JSON-ответов и в любых сценариях, где данные не выводятся напрямую в HTML.
Метод GetNext()
Метод GetNext() помимо получения строки результата выполняет дополнительную обработку данных, ориентированную на безопасный вывод в HTML.
Основные характеристики:
- Выполняет HTML-экранирование значений.
- Декодирует HTML-сущности.
- Подготавливает данные для вывода в шаблоне.
- Добавляет поля с префиксом ~, содержащие «сырые» значения из базы данных.
- Возвращаемые данные:
- Поля без префикса ~ — безопасные для вывода значения.
- Поля с префиксом ~ — исходные данные без обработки.
Назначение:
Метод рекомендуется использовать в шаблонах компонентов и других местах, где данные выводятся непосредственно в HTML.
GetNext() выполняет дополнительные операции обработки строк, что может оказывать заметное влияние на производительность при больших объёмах данных. При выборках в тысячи элементов использование Fetch() предпочтительнее, если нет необходимости в HTML-подготовке.
Важные ограничения
Методы Fetch() и GetNext() используют один и тот же курсор результата.
Их нельзя комбинировать в рамках одной выборки, так как каждый вызов смещает указатель на следующую строку.
Использование GetNext() в бизнес-логике может привести к искажению данных из-за экранирования.
Рекомендации по использованию
Использовать Fetch() для:
- серверной логики;
- расчётов и сравнений;
- API и интеграций;
- обработки больших выборок.
Использовать GetNext() для:
- шаблонов компонентов;
- прямого вывода данных в HTML;
- случаев, когда требуется автоматическая защита от XSS.
Методы Fetch() и GetNext() решают разные задачи и не являются взаимозаменяемыми. Корректный выбор метода позволяет избежать ошибок отображения, проблем с безопасностью и неоправданных потерь производительности. Понимание различий между ними является обязательным для качественной разработки на платформе 1С-Битрикс.