LINUX.ORG.RU

НЁХ и престашоп

 , , ,


0

1

Итак есть сайт на prestashop жил он долго и счастливо, но вот начал творится сабж

Не загружаются новые миниатюры для товара ругается на этот запрос

SELECT * FROM `ps_image` i INNER JOIN ps_image_shop image_shop
ON (image_shop.id_image = i.id_image AND image_shop.id_shop = 1)
WHERE `id_product` = 2
AND image_shop.`cover`= 1 LIMIT 1

Выхлоп, конечно

#1052 - Column 'id_product' in where clause is ambiguous

Что делать с запросом это уже моя забота, в простейшем случае нужно явно указать имя таблицы со столбцом id_product. Вроде так..

Вопросы другие: во-первых, как и где в Престе формируются SQL-запросы sudo cast KRoN73? Во-вторых, почему до сего дня все работало без проблем и никто горя не знал, а сейчас даже после восстановления из бекапа, который был 100% рабочим такая вот фигня...

Короче галиматья и бред... я спать.

Пишите.

Версия Prestashop 1.6.0.9

★★★★★

Последнее исправление: Twissel (всего исправлений: 1)

почему до сего дня все работало без проблем

Очевидно, в этих двух таблицах был всего один столбец с таким именем.

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

Да это я уже понял.

Осталось главное, разобраться, где строится этот запрос.

Twissel ★★★★★
() автор топика

Вроде все эти запросы в AdminProductsController.php .

Twissel ★★★★★
() автор топика
Ответ на: комментарий от goingUp

Дело в том, что это оригинальный код (запрос) Престашоп, который раньше пару лет нормально отрабатывал.

Потому и грешу на хостера.

Twissel ★★★★★
() автор топика

Вопросы другие: во-первых, как и где в Престе формируются SQL-запросы sudo cast KRoN73? Во-вторых, почему до сего дня все работало без проблем и никто горя не знал

Вот тут х.з. У меня как работал, так и работает. Только пришлось в отдельную виртуалку перетащить, а то 1.6.x с PHP7 несовместим. Вообще, ужасненький код.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73
$count_cover_image = Db::getInstance()->getValue('
			SELECT COUNT(*) FROM '._DB_PREFIX_.'image i 
			INNER JOIN '._DB_PREFIX_.'image_shop ish ON (i.id_image = ish.id_image AND ish.id_shop = '.(int)$id_shop.') 
			WHERE i.cover = 1 AND `id_product` = '.(int)$id_product);

я полагаю вот этот кусок кода, находится он в /controllers/admin/AdminProductsController.php функция ajaxProcessUpdateProductImageShopAsso()

Главный вопрос какого он сломался, ответа пока нет.

Twissel ★★★★★
() автор топика
Последнее исправление: Twissel (всего исправлений: 2)
Ответ на: комментарий от Twissel

Прикольно. Посмотрел сейчас у себя — и в image, и в image_shop есть столбцы id_product :)

Посмотри, не обновлялся ли у тебя mysql в виде mariadb до версии 10.2 :) Они там резко включили STRICT_MODE по умолчанию и тонна старого MySQL перестала работать без выключения этого режима. Не знаю, как себя вёл MySQL в подобных процитированному запросах, но мало ли... У меня, вот, куча кода сломалась, который при INSERT'ах в таблицы без явно указанных значений по умолчанию вставлял, таки, записи с неполным списком параметров :)

KRoN73 ★★★★★
()
Ответ на: До кучи от Twissel

А, да. Если ошибка _относительно_ надавняя и проявляется только при аплоаде... Я последний раз картинки в PrestaShop грузил, наверное, в конце весны :D

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

А можешь проверить на виртуалке?

Twissel ★★★★★
() автор топика
Ответ на: комментарий от KRoN73
Версия сервера: 5.6.27-75.0-log - Percona Server (GPL), Release 75.0, Revision 8bb53b6
Twissel ★★★★★
() автор топика
Ответ на: комментарий от Twissel

А можешь проверить на виртуалке?

Ломает. Я даже пароль от админки не вспомню где лежит, искать придётся :D Да и чтобы не мусорить, нужно будет копию поднимать.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Не суть важно, ИМХО, это хостер обновил Percona и они там что-то сломали в очередной раз.

Twissel ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Короче, пока решилось ужасными костылями, такими как добавление алиаса таблицы в запрос в файлах classes/Image.php и classes/orders/Order.php, а также сменой типа индекса для полей id_product_cover и product_id для таблиц ps_image и ps_image_shop с unique на index. И вот, я даже не знаю помечать ли тему решенной. Пока работает, но само по себе решение ужасно.

С веткой 1.7 работал? Там багов много? :-)

Twissel ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Т.е. кроме правок в коде пришлось делать еще 2 запроса

ALTER TABLE `db_presta`.`ps_image` DROP INDEX `id_product_cover` ,
ADD INDEX `id_product_cover` ( `id_product` , `cover` ) COMMENT '';

ALTER TABLE `db_presta`.`ps_image_shop` DROP INDEX `id_product` ,
ADD INDEX `id_product` ( `id_product` , `id_shop` , `cover` ) COMMENT '';

Могло быть такое, что индексы посыпались?

Все-таки интересно, что это было.

Twissel ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Можешь посмотреть какой у тебя тип индексов для id_product_cover и id_product?

Twissel ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Ладно, я сам проверил, нету индексов по этим полям.

Так что, ничего нового. Скорее всего кривые ручёнки предыдущих фрилансеров, с кривыми же плагинами наделали проблем.

Сейчас проверю еще как перенесёт апгрейд на Percona 5.7 и можно помечать тему решенной.

Twissel ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

а то 1.6.x с PHP7 несовместим.

У меня сейчас нормально работает демо-магазин на 7.0.24. Версия движка из ОП поста — 1.6.0.9 . А что у тебя не работает?

Twissel ★★★★★
() автор топика
Ответ на: комментарий от Twissel

Ладно, я сам проверил, нету индексов по этим полям.

Индексы и не влияют на такого рода ошибки.

А что у тебя не работает?

Регистрация пользователей после заполнения формы. Ошибку уже не помню, то ли «Access to undeclared static property», то ли ещё что-то подобное.

KRoN73 ★★★★★
()
Ответ на: комментарий от Twissel

Добавление алиаса таблицы как раз нифига не костыль, когда пишешь запрос с джоинами, надо всегда указывать таблицу.поле, иначе потом хер разгребешь.

nikolnik ★★★
()

Как вообще тебе престашоп?

Я собираюсь открывать серьезный магазин на нём, нашел уже и нужные модули оплаты и тему отличную, всё платное и свежайшее. Престашоп будет стоять свежайший.

Bruce_Lee ★★
()
Ответ на: комментарий от Bruce_Lee

Вообще по ощущениям лучше Опенкарта, но хуже Мадженто/Битрикс.

Но тут как бы не та весовая категория, так что вполне неплохой движок.

А я уже разгребаю очередной баг на ветке 1.6, ЧСХ на том же хостинге.

Twissel ★★★★★
() автор топика
Ответ на: комментарий от Twissel

Можешь объяснить в чем профит использования версии (1.6.0.9) вышедшей 31 июля 2014 года, т.е. более 3х лет назад?

В 1.6 ветке текущая версия 1.6.1.17, вышедшая месяц назад.

Я открываю магаз на свежайшей 1.7.2.3, для которой поддерживается и тема и модули оплаты.

Bruce_Lee ★★
()
Ответ на: комментарий от Bruce_Lee

Можешь объяснить в чем профит использования версии (1.6.0.9) вышедшей 31 июля 2014 года, т.е. более 3х лет назад?

Вопрос не ко мне, а к заказчику. Я так понял ему ИМ достался по наследству, так что жрём, что дали и не чирикаем.

Twissel ★★★★★
() автор топика
Ответ на: комментарий от Bruce_Lee

Но сейчас расковыриваю второй глюк, уже у другого заказчика, с модулем Google Analitycs и не знаю советовать ли Престу тебе. Может Опенкарт и лучше. Хотя, как говорится, аксиома Эскобара.

Twissel ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.