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

Модуль Интернет-магазин и злополучный mysql error

00 голосов
3
Сначала оговорюсь, что возможно дело в настройках хостинга и кривизне рук, но все-таки хотелось бы услышать комментарий тех, кто сталкивался с подобной проблемой. По-порядку...
Система
1С-Битрикс: Управление сайтом 9.0.3 (Бизнес)
Хостинг -
Ubuntu 10.04
Apache/2.2.14 (Ubuntu)
PHP 5.3.2-1ubuntu4.2 with Suhosin-Patch
MySQL 5.1.41-3ubuntu12.3

Проблема
Сайт установлен с демо-данными, в том числе и магазином. В магазине совершаем покупку и делаем заказ. Идем в "Корзину" и вуаля:
по адресу /personal/cart/
Код
File: ..../bitrix/modules/sale/mysql/discount.php
Line: 143
MySQL Query Error: SELECT DISTINCT D.ID as ID, D.LID as LID, D.LID as SITE_ID, D.PRICE_FROM as PRICE_FROM, D.PRICE_TO as PRICE_TO, D.CURRENCY as CURRENCY, D.DISCOUNT_VALUE as DISCOUNT_VALUE, D.DISCOUNT_TYPE as DISCOUNT_TYPE, D.ACTIVE as ACTIVE, D.SORT as SORT, DATE_FORMAT(D.ACTIVE_FROM, '%d.%m.%Y %H:%i:%s') as ACTIVE_FROM, DATE_FORMAT(D.ACTIVE_TO, '%d.%m.%Y %H:%i:%s') as ACTIVE_TO FROM b_sale_discount D WHERE ((((D.LID = 's1' )))) AND ((((D.ACTIVE = 'Y' )))) AND ((( D.ACTIVE_FROM IS NULL OR NOT (D.ACTIVE_FROM > '2010-06-17 15:08:14')))) AND ((( D.ACTIVE_TO IS NULL OR NOT (D.ACTIVE_TO < '2010-06-17 15:08:14')))) AND ((())) AND ((())) ORDER BY D.SORT ASC [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 ((())) ORDER BY D.SORT ASC' at line 1]


Что ж? Первым делом идем сюда, на форум, вторым - в FAQ, и по дороге в Описание модуля - и что-то мои глаза ничего не видят.

Далее смотрим на ошибку, в файл, где она произошла и получается такой костыль:
Код
$strSql = str_replace("AND ((()))", " ", $strSql );

в строке 142 файла /bitrix/modules/sale/mysql/discount.php .

Далее похожие ошибки, которые правятся как
Код
$strSql = str_replace("() OR" , " ", $strSql);
$strSql = str_replace("AND ((()))" , " ", $strSql);

в строке 165 файла /bitrix/modules/sale/mysql/delivery.php

По базе данных: как ни странно (и я искренне верил, что это должно помочь) перевод MySQL in TRADITIONAL mode результатов не дал. Ошибка не исчезла.
Код
До    
sql mode ="STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE, NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER"

После
sql mode=""


Результат
Оформления заказа работает.

Вопрос
Как должен быть настроен хостинг, что б подобной ошибки не возникало?
У кого-нибуть возникали сложности с установкой Битрикс с БД MySQL v.5.0 и выше ?
спросил 22 Фев, 14 от Alexiaz (320 баллов)

3 Ответы

00 голосов
Проблема наблюдается только на PHP 5.3.x. Напишите в ТП исправим.
ответил 21 Июль, 14 от Ajattara (380 баллов)
00 голосов
2Evgeny Petrichenko, :
спасибо за пояснение.
В техническую поддержку уже написал. ID # 164010
Правда, лицензия не коммерческая, и я не особо надеялся на быстрый или вообще ответ.

P.S. и неподумал, что версия PHP сыграет роль.
ответил 22 Ноя, 14 от Alexiaz (320 баллов)
00 голосов
Цитата
Evgeny Petrichenko пишет:
Напишите в ТП исправим.

Вопрос наверно риторический, но все же спрошу. В следующих обновлениях будут эти исправления?
ответил 18 Март, 15 от Delp (7,220 баллов)

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

0 голосов
3 ответов
0 голосов
6 ответов
0 голосов
3 ответов
спросил 09 Фев, 13 от Drop (120 баллов)
0 голосов
0 ответов
0 голосов
2 ответов