Jump to content

[Résolu] Class DB et requête DELETE


Recommended Posts

Bonjour à tous, ça fait un bail que je n'ai pas ouvert un post sur le forum,

 

Ma question concerne la class db. Dans le cadre d'une désinstallation de module, j'ai besoin de supprimer une (ou plusieurs) lignes précises de la base de données, dans des tables précises également, en fonction de critères tout aussi précis.

 

Autant le dire tout de suite, j'ai agencé trois modules : devis, paiement par chèque en trois fois sans frais, et paiement au magasin, téléchargeables gratuitement sur mon site perso (n'en déplaise aux agences web, qui n'avaient qu'à m'embaucher)

 

Lors de leur installation, ils créent dans les tables ps_order_state et ps_order_lang (entre autres) des lignes avec les infos nécessaires. Jusque là, tout va bien. Pardonnez-moi si je n'utilise pas les bons termes.

 

Pour la désinstallation, j'utilise ceci :

 

$sql = "DELETE FROM `"._DB_PREFIX_."order_state` WHERE `module_name` = 'QUOTE'";

if (!Db::getInstance()->execute($sql))

die();

 

Ceci m'attriste, car j'ai voulu utiliser un truc du genre : 

 

Db::getInstance()->delete('target_table', 'myField < 15', 3);

(et tout le monde reconnaîtra le tuto)

 

mais ça n'a pas marché. Il se trouve que la requête ne cible que la première colonne de la table de la base de données (d'après mes tests, mais l'erreur n'est pas humaine, c'est juste tout moi), or je cible autre chose, à savoir une ligne dans une table en ayant pour condition WHERE un nom déterminé. Et cela m'attriste encore car dans le cadre de modifications de la part de l'utilisateur (au niveau du nom), ma requête SQL ne vaut plus un clou. Donc HELP (et ce genre de requête n'est pas reconnu par PhpMyAdmin).

 

Donc ma question est : quelle est la bonne méthode pour désinstaller proprement un module en ayant une requête propre, sécurisée, stable, et selon ce genre de contraintes, en me fiant à la class db de Presta ? Le problème étant - comme je le crie régulièrement - entre la chaise et le clavier, j'imagine que j'effectue quelque chose qui cloche...

 

Sinon je tenais à remercier les personnes qui administrent le forum, autant vous dire qu'en un an j'en suis arrivé au stade où j'en suis grâce à vous (et cela compte énormément pour moi). N'ayant jamais reçu de formation Prestashop, je suis malgré tout parvenu à faire ce que mon site cyrilchalamon.fr propose en maigre partie, et je n'aurai de cesse de défendre ces développeurs qui se battent à la fois pour la francophonnie et pour l'entraide gratuite, sincère, et régulière. Je n'ai pas ce courage (moi je préfère boire un coup avec les potes au lieu d'aider sur le forum, j'en suis navré mais la bière est vraiment bonne en Haute-Pyrénées !)

 

Cyril CHALAMON

 

P.S. : ne vous sentez pas de répondre immédiatement, d'autres personnes ont certainement des soucis plus urgents que les miens (d'autant plus que je ne fais pour le moment que du gratuit). Mais la question m'intéresse vivement, pour des raisons de sécurité et de propreté de développement. Et je tiens à ajouter que le jour où Wordpress passera au MVC, je sabre le whisky ! (je déteste le champagne...)

Edited by cyssoo (see edit history)
Link to comment
Share on other sites

Bonjour,

 

Voici un exemple de l'utilisation de la classe DB et de sa méthode delete():

Db::getInstance()->delete('product', 'id_product = '.(int)$product->id);

Il est différent du cas énoncé, mais il permet de visualiser assez directement ce qu'il en est. Dans le cas présent, on cible la table product (on ne mentionne pas le préfixe) et en deuxième paramètre ce situe la condition (ici, id_product = X).

 

Dans l'exemple mentionné, nous pouvons voir un troisième paramètre qui correspond au nombre d'enregistrements à supprimer, au maximum.

 

Pour transposer cela à votre souhait, il me semble que vous devez écrire ceci:

Db::getInstance()->delete('order_state', 'module_name = "'.$this->module_name.'");
  • Like 1
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...