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

Что такое `fetchRaw`?
Метод:
array|false public \Bitrix\Main\DB\Result::fetchRaw();
- Возвращает:
- Ассоциативный массив (если данные найдены)
- `false` (если данные закончились или строк нет)
- Параметров: Нет
Главное отличие от часто используемого `fetch()` состоит в том, что `fetchRaw()` возвращает именно «сырые» данные из БД, без каких-либо внутренних преобразований. Это бывает полезно, если нужно получать информацию в оригинальном формате (например, когда нужно сохранить «как есть» двоичные поля, данные в определённой кодировке и т. д.).
Сценарии использования
- Получение необработанных данных для специализированной обработки Если вы создаёте интеграцию или пишете функционал, где важны двоичные данные, зашифрованная информация, нестандартное хранение дат и т. д., метод `fetchRaw()` будет как нельзя кстати.
- Сравнение данных Когда важно сравнить точные значения, хранящиеся в базе, без модификаций, может быть полезно получить именно «сырые» данные.
- Оптимизация Иногда в больших проектах, где написана своя логика обработки данных после выборки из БД, выгодно явно управлять процессом преобразования записей. `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 "Нет данных или запрос не вернул результатов.";
}
Пошаговое объяснение
- Подключение к БД: Используем метод `Application::getConnection()`, чтобы получить объект подключения к базе данных в 1С-Битрикс.
- Подготовка и выполнение запроса: Вызываем `$connection->query($sql)`, где в переменной `$sql` хранится обычный SQL-запрос.
- Получение результата:
Метод `fetchRaw()` возвращает первую доступную строку результата в виде ассоциативного массива, где:
- Ключи массива соответствуют названиям полей в таблице БД,
- Значения – «сырой» контент из этих полей.
- Проверка на наличие данных:
- Если строчки существуют, выведется массив.
- Если данных нет, метод возвращает `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()`, обязательно делитесь ими в комментариях к статье!