Для выполнения произвольных sql запросов к базе данных в Битрикс предусмотрен метод query()
у объекта Bitrix\Main\DB\Connection
.
<?php
$res = \Bitrix\Main\Application::getConnection()->query($sql);
В переменной $sql
находится сам запрос, который нужно выполнить.
Каких-либо ограничений нет, в запросе можно использвать сортировку, фильтры, лимиты, join-ы, подзапросы и т.д.
Ниже приведены примеры выполнения запросов для стандартных операций чтение/создание/обновление/удаление.
Выборка данных (Select)
Наверное самая частая оперция это выборка данных, тут логика простая, выполнили запрос, далее перебираем строки ответа с помощью метода fetch()
.
<?php
$sql = 'SELECT `ID`, `FROM_MODULE_ID`, `MESSAGE_ID`, `TO_MODULE_ID`, `TO_CLASS`, `TO_METHOD` FROM `b_module_to_module` LIMIT 2';
$res = \Bitrix\Main\Application::getConnection()->query($sql);
$arResult = array();
while($row = $res->fetch()) {
$arResult[] = $row;
}
var_dump($arResult);
Результат выполнения:
array(2) {
[0]=>
array(6) {
["ID"]=>
string(4) "1135"
["FROM_MODULE_ID"]=>
string(7) "catalog"
["MESSAGE_ID"]=>
string(38) "Bitrix\Catalog\Model\Price::OnAfterAdd"
["TO_MODULE_ID"]=>
string(7) "catalog"
["TO_CLASS"]=>
string(44) "Bitrix\Catalog\Compatible\EventCompatibility"
["TO_METHOD"]=>
string(22) "handlerPriceOnAfterAdd"
}
[1]=>
array(6) {
["ID"]=>
string(4) "1139"
["FROM_MODULE_ID"]=>
string(7) "catalog"
["MESSAGE_ID"]=>
string(41) "Bitrix\Catalog\Model\Price::OnAfterDelete"
["TO_MODULE_ID"]=>
string(7) "catalog"
["TO_CLASS"]=>
string(44) "Bitrix\Catalog\Compatible\EventCompatibility"
["TO_METHOD"]=>
string(25) "handlerPriceOnAfterDelete"
}
}
Добавление (Insert)
$sql = 'INSERT INTO `b_iblock_section` (`IBLOCK_ID`, `NAME`) VALUES ("1", "test")';
$res = \Bitrix\Main\Application::getConnection()->query($sql);
// Проверяем количество добавленных строк
var_dump(\Bitrix\Main\Application::getConnection()->getAffectedRowsCount());
// При успешно выполнении запроса для данного примера вернет 1
Проверяем, что запрос выполнился успешно с помощью метода getAffectedRowsCount()
так как в данном случаи метод fetch()
не подходит.
Обновление (Update)
$sql = 'UPDATE `b_iblock_section` SET `NAME` = "test upd" WHERE `ID` = 2763';
$res = \Bitrix\Main\Application::getConnection()->query($sql);
//Проверяем количество обновленных строк
var_dump(\Bitrix\Main\Application::getConnection()->getAffectedRowsCount());
// При успешно выполнении запроса для данного примера вернет 1
Проверяем, что запрос выполнился успешно с помощью метода getAffectedRowsCount()
так как в данном случаи метод fetch()
не подходит.
Удаление (Delete)
$sql = 'DELETE FROM `b_iblock_section` WHERE `ID` = 2763';
$res = \Bitrix\Main\Application::getConnection()->query($sql);
//Проверяем количество удаленных строк
var_dump(\Bitrix\Main\Application::getConnection()->getAffectedRowsCount());
// При успешно выполнении запроса для данного примера вернет 1
Проверяем, что запрос выполнился успешно с помощью метода getAffectedRowsCount()
так как в данном случаи метод fetch()
не подходит.