Это решение также помогает в случае ошибки типа:
Код |
---|
Query error: [1064] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND RIGHT_MARGIN >=' at line 7 (400)
UPD ATE b_iblock_section SE T
TIMESTAMP_X=TIMESTAMP_X
,RIGHT_MARGIN = RIGHT_MARGIN + 2
WHERE
IBLOCK_ID = 38
AND LEFT_MARGIN <=
AND RIGHT_MARGIN >=
/bitrix/modules/main/classes/general/database.php:647
#0: CAllDatabase->Query(string)
/bitrix/modules/iblock/classes/general/iblocksection.php:2763 |
Поля LEFT_MARGIN, RIGHT_MARGIN и DEPTH_LEVEL имеют значение по умолчанию NULL, но в этом модуле Битрикс со свойственной ему аккуратностью лепит запрос в базу тупой конкатенацией, не проверяя, есть ли в строках хоть какое-нибудь значение:
Код |
---|
if ($arParent)
{
$DB->Query("
UPD ATE b_iblock_section SE T
TIMESTAMP_X=".($DB->type == "ORACLE" ? "NULL" : "TIMESTAMP_X")."
,RIGHT_MARGIN = RIGHT_MARGIN + 2
WHERE
IBLOCK_ID = ".$IBLOCK_ID."
AND LEFT_MARGIN <= ".$arParent["LEFT_MARGIN"]."
AND RIGHT_MARGIN >= ".$arParent["RIGHT_MARGIN"]."
");
} |