Jump to content

Une erreur inattendue s'est produite. [PrestaShopException code 23000]


Recommended Posts

Bonjour,

Cela fait plus de 6 mois que j'ai refait ma boutique avec Prestashop, version 8.0.4.
Jusqu'à présent je n'ai eu aucun souci, mais depuis quelques semaines j'ai quelques commandes dont je ne peux plus changer l'état.
J'ai généré le bordeaux d'expédition avec le module de Colissimo, l'état est bien passé en "En cours d'expédition", mais après ça, impossible de changer l'état.
J’obtiens le message d'erreur suivant :

Une erreur inattendue s'est produite. [PrestaShopException code 23000]

Quelqu'un serait pourquoi cette erreur ce produit et comment la corriger ?

Merci d'avance.
Cordialement, Adiance.

Link to comment
Share on other sites

Merci pour votre réponse, je regarderais ce weekend pour installer la 8.0.5.

Le mode debug donne un peu plus d'information :

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '54-588-0-0' for key 'product_sqlstock'.

Merci d'avance.
Cordialement, Adiance.

Link to comment
Share on other sites

  • 3 months later...
  • 1 year later...
Le 26/04/2024 à 2:00 PM, najib elazoui a dit :

j'ai corrigé  l’erreur avec  car  le  ps 8.x   n'utilise pas cette colonne product_sqlstock

ALTER TABLE `' . _DB_PREFIX_ . 'stock_available` DROP INDEX `product_sqlstock`  

Bonjour,

Attention, en supprimant l'index product_sqlstock vous masquez le problème sans le résoudre ! Cet index UNIQUE est essentiel pour garantir l'intégrité des données de stock (une seule entrée par combinaison produit/déclinaison/shop). Sans lui, vous risquez de créer des doublons qui causeront des incohérences de stock.

La vraie cause du problème :

L'erreur Duplicate entry 'XXXXX-YYY-0-0' for key 'product_sqlstock' survient généralement quand la table ps_stock_available contient des enregistrements incohérents, notamment :

Des entrées orphelines : déclinaisons supprimées du catalogue mais toujours présentes dans stock_available

Des incohérences de id_shop : certaines entrées avec id_shop = 0 alors que d'autres ont id_shop = 1 (en mode single-shop)

-- Vérifier les entrées orphelines (déclinaisons supprimées)

SELECT sa.* FROM ps_stock_available sa LEFT JOIN ps_product_attribute pa ON sa.id_product_attribute = pa.id_product_attribute WHERE sa.id_product_attribute != 0 AND pa.id_product_attribute IS NULL;

-- Vérifier les incohérences id_shop

SELECT id_shop, COUNT(*) as nb FROM ps_stock_available GROUP BY id_shop;

-- 1. Backup préventif

CREATE TABLE ps_stock_available_backup AS SELECT * FROM ps_stock_available;

 

Si vous n'avez pas activé le multiboutique la résolution est simple (à adapter selon votre cas) 

UPDATE ps_stock_available SET id_shop = 1 WHERE id_shop = 0;

S'il y'a des doublons, il faut supprimer ceux en incohérence (id_shop = 0)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...