Получение данных посредством методов в системе битрикс довольно распространенная практика, и действительно существуют множество методов, которые осуществляют самостоятельную выборку данных из базы. Мы же передаем некоторые параметры методу, в виде массива, такие, к примеру, как параметры сортировки, фильтра, выборки и так далее. Но как быть, если есть необходимость выполнить SQL запрос самому. Скажем вам по каким либо причинам не подходит ни один метод для работы с данными, и вы решили реализовать свои запросы напрямую в базу. Как не странно, но для этого есть так же API, а точнее метод, который позволит выполнить подобные запросы в базу, что тоже удобно. Т.к. подключение к базе и прочие предварительные действия, при работе сервером базы данных выполняет за вас битрикс сам.
Чтобы выполнить запросы в базу данных в Bitrix, можно воспользоваться методом CDatabase::Query. Данный метод в случае успешного выполнения возвращает объект класса CDBResult. Согласно синтаксису использования метода, регламентированный в документации метод может принимать четыре параметра, далее по порядку.
sql – SQL запрос который нам следует выполнить, является обязательным параметром;
ignore_errors – Игнорирование ошибок, в случае, если параметр установлен в значение «true», то при возникновении ошибок, метод вернет в качестве результата – false. В ином случае в случае возникновение ошибки будет прекращать выполнение всего скрипта. Параметр необязательный.
error_position – Строка, определяющая позицию в коде где обращались к методу CDatabase::Query. В случае возникновения ошибки выполнения SQL запроса, и наличии установленной переменной $DBDebug=true в файле /bitrix/php_inerface/dbconn.php, будет отображена информация, а так же сам SQL запрос. Параметр является необязательным.
Options – Дополнительные опции, подробно об этом параметре в документации на данный момент нет информации. Является необязательным параметром.
Теперь давайте рассмотрим простой пример выполнения SQL запроса. Первым делом к скрипту нам необходимо подключить API битрикса. В данном примере попробуем обновить записи элемента информационного блока.
// подключение API Bitrix require_once($_SERVER['DOCUMENT_ROOT']."/bitrix/modules/main/include/prolog_before.php"); global $DB; $res = $DB->Query( "UPDATE b_iblock_element SET `PREVIEW_PICTURE` = '1755', `DETAIL_PICTURE` = '1755', `PREVIEW_TEXT` = 'Текст для анонса', `DETAIL_TEXT` = 'Текст для детального описания', `PREVIEW_TEXT_TYPE` = 'text', `DETAIL_TEXT_TYPE` = 'text' WHERE `ID` = '7899822" );
Если вы заглядывали в структуру таблиц баз данных системы bitrix, то, наверное, уже догадались, что в таблице b_iblock_element содержатся базовые поля элементов инфоблока. Данный запрос обновит значения некоторых полей элемента, у которого ID = 7899822. Таким же образом можно выполнять и другие SQL запросы в базу, а самое главное не перестараться и не сделать так, чтобы от подобного воздействия появилось некорректное работы самой системы битрикс. На этом всё, успехов!
Спасибо за материал. Но для добавления записи лучше всё же использовать другую функцию БУС $DB->Insert