Блог разработчика 1С-Битрикс

Использование метода Result::fetchRaw() в 1С-Битрикс

В этой статье мы подробно разберём, что делает метод `\Bitrix\Main\DB\Result::fetchRaw()`, в каких случаях его стоит использовать и как правильно работать с его результатами. Данный метод позволяет получить одну строку результата SQL-запроса в необработанном (сыром) виде – именно в том формате, в котором она хранится в базе данных.

Использование метода Result::fetchRaw() в 1С-Битрикс

Что такое fetchRaw?

Метод:

array|false public \Bitrix\Main\DB\Result::fetchRaw();
  • Возвращает:
    • Ассоциативный массив (если данные найдены)
    • false (если данные закончились или строк нет)
  • Параметров: Нет

Главное отличие от часто используемого fetch() состоит в том, что fetchRaw() возвращает именно «сырые» данные из БД, без каких-либо внутренних преобразований. Это бывает полезно, если нужно получать информацию в оригинальном формате (например, когда нужно сохранить «как есть» двоичные поля, данные в определённой кодировке и т. д.).

Сценарии использования

  1. Получение необработанных данных для специализированной обработки Если вы создаёте интеграцию или пишете функционал, где важны двоичные данные, зашифрованная информация, нестандартное хранение дат и т. д., метод fetchRaw() будет как нельзя кстати.
  2. Сравнение данных Когда важно сравнить точные значения, хранящиеся в базе, без модификаций, может быть полезно получить именно «сырые» данные.
  3. Оптимизация Иногда в больших проектах, где написана своя логика обработки данных после выборки из БД, выгодно явно управлять процессом преобразования записей. fetchRaw() даёт вам полный контроль над преобразованием – вы можете сами решить, что и как с данными делать.

Пример использования

Ниже приведён простой пример, показывающий, как работать с fetchRaw(). В примере мы делаем выборку из таблицы, содержащей, предположим, пользователей, и выводим первую найденную запись в «сыром» виде.

<?php
use Bitrix\Main\Application;
use Bitrix\Main\DB\Result;
$connection = Application::getConnection();
// Пример SQL-запроса (используйте свои таблицы и условия)
$sql = "SELECT * FROM b_user WHERE ACTIVE='Y'";
$result = $connection->query($sql);
/** @var Result $result **/
// Получаем одну строку данных в «сыром» виде
$row = $result->fetchRaw();
if ($row !== false) {
    echo '<pre>';
    print_r($row);
    echo '</pre>';
} else {
    echo "Нет данных или запрос не вернул результатов.";
}

Пошаговое объяснение

  1. Подключение к БД: Используем метод Application::getConnection(), чтобы получить объект подключения к базе данных в 1С-Битрикс.
  2. Подготовка и выполнение запроса: Вызываем $connection->query($sql), где в переменной $sql хранится обычный SQL-запрос.
  3. Получение результата: Метод fetchRaw() возвращает первую доступную строку результата в виде ассоциативного массива, где:
    • Ключи массива соответствуют названиям полей в таблице БД,
    • Значения – «сырой» контент из этих полей.
  4. Проверка на наличие данных:
    • Если строчки существуют, выведется массив.
    • Если данных нет, метод возвращает false.

Использование fetchRaw в цикле

Если нужно последовательно обойти все строки результата, можно вызывать fetchRaw() в цикле while. Код будет выглядеть так:

<?php
use Bitrix\Main\Application;
use Bitrix\Main\DB\Result;
$connection = Application::getConnection();
$sql = "SELECT * FROM b_user";
$result = $connection->query($sql);
while ($row = $result->fetchRaw()) {
    // Здесь вы можете обрабатывать строку, например, выводить данные или сохранять их в массив
    echo 'ID пользователя: ' . $row['ID'] . '<br>';
}

После того как все данные будут «перебраны», при следующем вызове fetchRaw() мы получим false.

Отличия от fetch()

В 1С-Битрикс есть также метод fetch(), который возвращает данные в более «приведённом» виде. Например, в некоторых случаях он может:

  • Приводить поля к нижнему/верхнему регистру;
  • Делать дополнительные преобразования чисел, дат и т. д.;
  • Учитывать маппинг полей при работе с ORM-моделью (если используется соответствующий функционал).

fetchRaw(), напротив, возвращает массив именно с исходными значениями, лежащими в таблице. Поэтому, если вам нужно избежать каких-либо автоматических преобразований, выбирайте именно fetchRaw().

Когда выбирать fetchRaw()?

  • Вы хотите реализовать собственную логику обработки или сохранения данных без участия внутренних механизмов платформы.
  • Необходимо сравнить исходные данные базы данных с чем-либо ещё (например, при импорте/экспорте).
  • Нужно считать специальные поля, которые не должны меняться при выборке (двоичные поля, данные в нестандартном формате).

Важно: если вы не уверены, что хотите именно «сырые» данные, может оказаться безопаснее и проще использовать fetch(). В стандартных задачах 1С-Битрикс преобразование данных часто бывает полезно и избавляет от лишних ошибок.

Заключение

Метод fetchRaw() в 1С-Битрикс – это удобный инструмент, когда нужно работать с результатами SQL-запроса «как есть» без дополнительных преобразований. Он часто используется в «низкоуровневых» сценариях, требующих тонкого управления данными. Однако перед его применением стоит убедиться, что «сырой» формат действительно нужен, так как иногда проще использовать стандартное fetch() с уже приведёнными к привычному виду данными.

Надеемся, что это руководство поможет вам эффективно применять fetchRaw() в проектах на 1С-Битрикс и расширит понимание того, как обрабатываются данные из базы. Если у вас остались вопросы или есть интересные кейсы по использованию fetchRaw(), обязательно делитесь ими в комментариях к статье!

Теги: fetchRaw, SQL, база данных, PHP, программирование, руководство


Валерий Макеев
10.09.2025 15:12
Этот код выводит логин, email и необработанную дату регистрации первых трёх пользователей с ID > 100, используя fetchRaw() для получения данных в исходном виде из базы 1С-Битрикс.
Код
<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');

use Bitrix\Main\Application;

$connection = Application::getConnection();
$sql = "SELECT LOGIN, EMAIL, DATE_REGISTER FROM b_user WHERE ID > 100 LIMIT 3";
$result = $connection->query($sql);

while ($rawUser = $result->fetchRaw()) {
    echo "Логин: {$rawUser['LOGIN']} | Email: {$rawUser['EMAIL']} | Дата регистрации (сырая): {$rawUser['DATE_REGISTER']}<br>";
}

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Модули и компоненты для «1С-Битрикс»

оценка производится на основе предоставленного Технического Задания

от 20 000 рублей
Разработка дополнительных модулей для 1С-Битрикс, расширение функционала, внедрение любых решений, требующихся для выполнения ваших бизнес-задач.

* стоимость зависит от конкретной задачи, ее объема и сложности выполняемых работ.

Участие в проекте

привлечение в проект на part-time основе

от 30 000 рублей / неделя

Возможно участие в проекте на ежедневной основе, как разработчика. Занятость - до 20 часов в неделю
Минимальный срок - одна неделя.

* сумма фиксированная

Разработка корпоративного сайта

от 7 дней

от 40 000 рублей

Разработка сайта без системы оплаты заказов через корзину

* стоимость зависит от наличия верстки, использования готового решения и т.д.