Сломался показ заказов: ошибка 1064 Исправлено

1

В какой-то момент перестали показываться заказы. Говорит, что ошибка в синтаксисе 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 комментариев

  • +2
    Эрик Эрик Webasyst 13 августа 2021 10:52 #

    Проблема может быть вызвана одним из используемых плагинов приложения Магазин. Попробуйте поотключать плагины в разделе Инсталлер / Установлено, чтобы определить проблемный плагин.

  • +1
    Олег Константинов Олег Константинов 13 августа 2021 13:30 #

    Эрик, спасибо за ответ. Все плагины выключил, остались только приложения Инсталлер, Магазин, Сайт и Команда (не выключаются) и платёжные/доставочные плагины, сделанные  разработчиками вебасиста. Но ошибка не ушла.

    Если пробую в phpMyAdmin выполнить этот проблемный запрос:

    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'))

    То появляется та же синтаксическая ошибка, похоже в первой строке. 

    Странно, что проблема возникла «из неоткуда» — не было изменений/обновлений плагинов. Может ли она быть связана с хостингом? Используется shared, тестировались версии php от 5.6 до 8.0 — на ошибку не влияют

  • +1

    Запустите это же запрос через phpmyadmin в вашей базе и посмотрите что оно выдаст.

    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'))

    Внешне, это вроде бы нормальный запрос. Во всяком случае у меня на MariaDb без всяких sql_mode он выполняется нормально.

    • +1
      Олег Константинов Олег Константинов 13 августа 2021 13:44 #

      Благодарю за подсказку, Николай! Похоже хостер обновил mariadb, что offset стало зарезервированным словом. Если вызываю заменив его например на offset1, всё прекрасно работает. Теперь осталось понять, что сделать с shop-script, чтоб там тоже заработало

    • +1
      Михаил Ушенин Михаил Ушенин Webasyst 1 декабря 2021 17:09 #

      Мы выпустили обновление Shop-Script, в котором устранили эту ошибку при выполнении SQL-запроса. Обновление можно установить в «Инсталлере».

      Проверьте, пожалуйста. Сообщите нам, если проблема сохранилась.

      Спасибо вам за то, что помогаете улучшать программные продукты Webasyst!

      Добавить комментарий

      Чтобы добавить комментарий, зарегистрируйтесь или войдите