В какой-то момент перестали показываться заказы. Говорит, что ошибка в синтаксисе SQL.
Query Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'FROM `shop_order`
WHERE `state_id` IN ('new','processing','au...' at line 2
Query: SELECT COUNT(id) offset
FROM `shop_order`
WHERE `state_id` IN ('new','processing','auth','paid') AND (create_datetime > '2020-03-17 07:52:29' OR (create_datetime = '2020-03-17 07:52:29' AND id < '1418')) code 1064
## wa-system/database/waModel.class.php(266)
#0 wa-system/database/waModel.class.php(367): waModel->run('SELECT COUNT(id...')
#1 wa-apps/shop/lib/model/shopOrder.model.php(46): waModel->query('SELECT COUNT(id...')
#2 wa-apps/shop/lib/actions/order/shopOrder.action.php(111): shopOrderModel->getOffset(1418, '`state_id` IN (...', true)
#3 wa-system/controller/waViewAction.class.php(188): shopOrderAction->execute()
#4 wa-system/controller/waViewController.class.php(86): waViewAction->display()
#5 wa-system/controller/waDefaultViewController.class.php(48): waViewController->executeAction(Object(shopOrderAction))
#6 wa-system/controller/waController.class.php(21): waDefaultViewController->execute()
#7 wa-system/controller/waViewController.class.php(46): waController->run(NULL)
#8 wa-system/controller/waFrontController.class.php(263): waViewController->run(NULL)
#9 wa-apps/shop/lib/classes/shopFrontController.class.php(22): waFrontController->runController(Object(waDefaultViewController), NULL)
#10 wa-system/controller/waFrontController.class.php(190): shopFrontController->runController(Object(waDefaultViewController), NULL)
#11 wa-system/controller/waFrontController.class.php(84): waFrontController->execute(NULL, 'order', NULL)
#12 wa-system/controller/waDispatch.class.php(157): waFrontController->dispatch()
#13 wa-system/controller/waDispatch.class.php(32): waDispatch->dispatchBackend('webasyst/shop/')
#14 wa-system/waSystem.class.php(610): waDispatch->dispatch()
#15 index.php(7): waSystem->dispatch()
#16 {main}
GET
[
'module' => 'order',
'id' => ' 1418',
'state_id' => 'new|processing|auth|paid',
'_' => '1628760416082',
]
Params
[]
В настройках БД указано 'sql_mode' => 'TRADITIONAL', но что с ним, что без него — ошибка та же
Подскажите, в чём может быть дело?, как чинить?
8 комментариев
Проблема может быть вызвана одним из используемых плагинов приложения Магазин. Попробуйте поотключать плагины в разделе Инсталлер / Установлено, чтобы определить проблемный плагин.
Эрик, спасибо за ответ. Все плагины выключил, остались только приложения Инсталлер, Магазин, Сайт и Команда (не выключаются) и платёжные/доставочные плагины, сделанные разработчиками вебасиста. Но ошибка не ушла.
Если пробую в phpMyAdmin выполнить этот проблемный запрос:
То появляется та же синтаксическая ошибка, похоже в первой строке.
Странно, что проблема возникла «из неоткуда» — не было изменений/обновлений плагинов. Может ли она быть связана с хостингом? Используется shared, тестировались версии php от 5.6 до 8.0 — на ошибку не влияют
А если с AS?
Запустите это же запрос через phpmyadmin в вашей базе и посмотрите что оно выдаст.
Внешне, это вроде бы нормальный запрос. Во всяком случае у меня на MariaDb без всяких sql_mode он выполняется нормально.
Благодарю за подсказку, Николай! Похоже хостер обновил mariadb, что offset стало зарезервированным словом. Если вызываю заменив его например на offset1, всё прекрасно работает. Теперь осталось понять, что сделать с shop-script, чтоб там тоже заработало
Угу, что-то такое и предполагал.
Еще не уверен что это запрос именно шопскрита. Больше похоже на какой-то фильтр заказов.
Временное решение: в файле
заменить
на
Т.к. "offset" начиная с MariaDB 10.6 — ключевое слово (в части select)
Мы выпустили обновление Shop-Script, в котором устранили эту ошибку при выполнении SQL-запроса. Обновление можно установить в «Инсталлере».
Проверьте, пожалуйста. Сообщите нам, если проблема сохранилась.
Спасибо вам за то, что помогаете улучшать программные продукты Webasyst!