Press "Enter" to skip to content

[PrestaShop 1.7.7.4] Nie można utworzyć nowego produktu – błąd: Out of range value for column 'id_product’

Admin 0

Zawartość artykułu

Opis błędu

Błąd polega na tym, że podczas próby utworzenia nowego produktu wywala nam stronę:

Po włączeniu trybu debubowania:

Zaawansowane -> Wydajność

Pojawia się błąd:

Out of range value for column 'id_product' at row 1<br /><br /><pre>INSERT INTO `pr_product` (`id_shop_default`, `id_manufacturer`, `id_supplier`, `reference`, `supplier_reference`, `location`, `width`, `height`, `depth`, `weight`, `quantity_discount`, `ean13`, `isbn`, `upc`, `mpn`, `cache_is_pack`, `cache_has_attachments`, `is_virtual`, `state`, `additional_delivery_times`, `id_category_default`, `id_tax_rules_group`, `on_sale`, `online_only`, `ecotax`, `minimal_quantity`, `low_stock_threshold`, `low_stock_alert`, `price`, `wholesale_price`, `unity`, `unit_price_ratio`, `additional_shipping_cost`, `customizable`, `text_fields`, `uploadable_files`, `active`, `redirect_type`, `id_type_redirected`, `available_for_order`, `available_date`, `show_condition`, `condition`, `show_price`, `indexed`, `visibility`, `cache_default_attribute`, `advanced_stock_management`, `date_add`, `date_upd`, `pack_stock_type`) VALUES ('1', '0', '0', '', '', '', '0', '0', '0', '0', '0', '', '', '', '', '0', '0', '0', '0', '1', '2', '6', '0', '0', '0', '1', NULL, '0', '0', '0', '', '0', '0', '0', '0', '0', '0', '', '0', '1', '0000-00-00', '0', 'new', '1', '0', 'both', '0', '0', '2023-01-07 08:45:59', '2023-01-07 08:45:59', '3')</pre>

 

Mamy zatem zablokowaną podstawową funkcję w sklepie internetowym… o co w tym chodzi i jak to naprawić?

Przyczyna

Za błędem prawdopobnie stoi nietypowy sposób zasilania produktami w sklepie. Czasem zamiast ręcznego dodawania produktu – są importery produktów z hurtowni, albo inne zewnętrzne aplikacje które dodają produkty (np. bazujące na API).

Zazwyczaj w takich aplikacjach ID produktu nie jest przesyłane. Jest tworzone automatycznie na podstawie osatniej dodanej wartości w sklepie. Czyli jest powiększane o wartość: 1. Wykorzystana jest tutaj podstawowa funcja MySQL – autoincrement.

Jednak taka automatyzacja może czasem natrafić na błąd albo źle napisany skrypt. I wtedy ID produktu jest przesyłane albo jest błędnie ustalane w bazie danych PrestaShop. A nawet ustalane jako ogromne – przewyższające zakres (stąd komunikat: „Out of range value for column”)

W naszym przypadku numery ID produktów prawidłowo naliczały się:

84190…84191…84192…84193…84194

i tutaj zamiast przyjąć po prostu: 84195 – id produktu wyniosło: 4294967295   –  !?

Ilustruje to screenshot:

Jest to liczba o wartości większej niż 4 miliardy: 4 294 967 295

Natomiast ID produktu w strukturze ma limit: int(10)

Stąd pojawia się w/w błąd.

Jak to naprawić?

Można oczywiście zwiększyć limit (my tak nie wykonaliśmy) jednak ID produktów by nadal przyrastało. A miało by to inne konsekwencje. Jak np. odpowiednie odniesienia w ID obrazków (ogromna ilość zagłębień w folderach img/p) czy też inne wypełnienia ID produktu w tabelach powiązanych (tam też mogą być limity, które trzeba będzie zwiększyć).

Wydaje się, że najłatwiej jest po prostu wykasować tę anomalię w tabeli produktowej, tak aby kolejne produkty już przyrastały w sposób prawidłowy.

W tym celu wykonaj nast. zapytania:

UWAGA! W naszych przykładach są użyte odp. dane: 4294967295 (id z blędym ID produktu), pr_ – prefix tabel PrestaShop (domyślny to ps_), 84193 – ostatni prawidłowo naliczany ID produktu, 7593 – ostatni prawidłowo naliczany ID w tabeli pr_stock_available. W swoich zapytaniach uwzględnij Twoje dane! Zaloguj się najpierw do phpmyadmin i użyj odpowiednich ID dla Twojej bazy.

UWAGA! #2. Wykonaj najpierw kopię bezpieczeństwa bazy danych… (Zaawanoswane -> Baza danych -> Kopia zapasowa DB)

DELETE FROM `pr_category_product` WHERE `id_product` = '4294967295';
DELETE FROM `pr_eventbus_incremental_sync` WHERE `id_object` = '4294967295';
DELETE FROM `pr_product` WHERE `id_product` = '4294967295';
ALTER TABLE `pr_product` auto_increment = 84193;
DELETE FROM `pr_product_lang` WHERE `id_product` = '4294967295';
DELETE FROM `pr_product_shop` WHERE `id_product` = '4294967295';
DELETE FROM `pr_search_index` WHERE `id_product` = '4294967295';
DELETE FROM `pr_stock_available` WHERE `id_product` = '4294967295';
ALTER TABLE `pr_stock_available` auto_increment = 7593;

Ogólnie mówiąc kasujemy tam produkty z feralnym gigantycznym numerem ID i poprawiamy wartości auto_increment, tak aby kolejne ID naliczały się w sposób prawidłowy.

Po wykonaniu tych prac – dodawanie produktów działa tak jak należy 🙂

grafika: wallpaperup.com

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

Zobacz także !
Edytor stron CMS nie zapisuje wprowadzanych zmian. A inne języki…