Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

if (CIBlockElement::Delete($row_id)) почему то всегда выдаёт true

00 голосов
2
В процессе выполнения своего скрипта обновления товаров удаляю элементы информационного блока
Код
...
if (CIBlockElement::Delete($row_id))
{
   $service_msg.=$row_id." - deleted<br>\r\n";
}
else
{
   $error_msg.=$row_id." - element not found<br>\r\n";
};
...


Элементы то удаляются, но если нет элемента с заданным $row_id, то всё равно if выдаёт истину, вне зависимости найден ли такой элемент.

Не понимаю почему?

В документации чётко сказано "Возвращается true в случае успешного удаления, в противном случае функция вернет false." но всегда истина? Подскажите в чём дело.

P.S. версия Битрикса 5.1.6
спросил 25 Сен, 13 от Psytrance (120 баллов)

2 Ответы

00 голосов
Если глянуть внутрь CIBlockElement::Delete, то там будет видно, что false возвращается только в случае явных ошибок. Причем ошибок на уровне MySQL.

Отсутствие элемента - не есть ошибка, то есть фактически произошло удаление несуществующего элемента. нет ошибки ни в логике этого выражения, ни в его реализации.

Ну а если перед началом удаления проверять есть ли вообще такой элемент - это даст один доп.запрос - зачем оно надо.
ответил 03 Окт, 13 от Arn4 (2,140 баллов)
00 голосов
Спасибо за ответ. Были смутные подозрения на эту тему, но уверенности не было. Ещё раз спасибо.
ответил 04 Янв, 14 от Psytrance (120 баллов)

Похожие вопросы

0 голосов
1 ответ
спросил 11 Авг, 14 от Keh192 (300 баллов)
0 голосов
9 ответов
0 голосов
4 ответов
0 голосов
3 ответов
спросил 14 Май, 13 от Blacat (260 баллов)
+1 голос
2 ответов