Effectuer des requêtes facilement dans prestashop
Si vous débutez avec prestashop, vous ne connaissez peut-être pas les fonctions intégrés pour effectuer des requêtes sur votre base de données, je vais vous expliquer de manière très simple comment réaliser ces requêtes grâce à la classe “Db”.
Il existe plusieurs fonctions utiles dans la classe “Db”, getInstance()->Execute() va nous permettre de récupérer une seule ligne de valeur tandis que getInstance()->ExecuteS() fera la même chose mais pour plusieurs lignes sous forme de tableau, getInstance()->getValue() sera utilisé pour récupérer une seule et unique valeur.
Récupérer une valeur dans la base de données :
$result = Db::getInstance()->getValue(' SELECT macolonne FROM `'._DB_PREFIX_.'matable` WHERE `id` = 1'); echo 'Result for id 1 : '.$result; |
Ici nous récupérons la valeur de “macolonne” ayant pour identifiant : 1 dans “matable”
Récupérer une seule ligne de valeurs dans la base de données :
1 2 3 4 5 6 | $result = Db::getInstance()->Execute(' SELECT * FROM `'._DB_PREFIX_.'matable` WHERE `id` = 1'); $result = mysql_fetch_array($result); echo 'Result for id : '.$result['id']; |
Ici nous récupérons la ligne de “matable” ayant pour identifiant : 1
Récupérer plusieurs lignes de valeurs dans la base de données :
1 2 3 4 5 | $results = Db::getInstance()->ExecuteS(' SELECT * FROM `'._DB_PREFIX_.'matable`'); foreach ( $results as $f ) echo 'Valeur: '.$f['macolonne']; |
Ici nous listons les valeurs de “macolonne” présentes dans “matable”.
NB : _DB_PREFIX_ est une variable contenant le préfix des tables dans la base de données (configuré à l’installation).
NB2 : Il n’est pas recommandé d’effectuer des requêtes autre part que dans les classes, cependant cela s’avère parfois nécessaire. Si vous pouvez utiliser les classes pour récupérer des valeurs, faites le !
result |
Pour récupérer une seule ligne de valeurs dans la base de données, il y a la fonction getRow() :
$sql = sprintf("SELECT * FROM %s WHERE id = %d", _DB_PREFIX_.'maTable', 1);
$res = Db::getInstance()->getRow($sql;)
echo 'Result for id : '.$res['id'];
Bien cordialement,
Lucien
Il manque une info :
Comment inclure cette classe dans une page PHP totalement indépendante ?
Par exemple un script AJAX qui POST une variable à une page PHP à un moment donné.
header.tpl -> POST à test.php -> Insert en BDD
Cette page PHP récupère la variable et mets en BDD.
Comment on se sers alors de la classe Db ?
Comment on inclut la classe ?
Gui.
Très bonne remarque, si tu créer une page php pour executer des actions à la racine de ta boutique prestashop, il suffit d’inclure les fichiers init.php et config.php pour utiliser toutes les classes de prestashop.
Exemple pour un fichier php situé à la racine :
require(dirname(__FILE__).'/config/config.inc.php');
require(dirname(__FILE__).'/init.php');
Tu peux maintenant effectuer des requêtes avec la classe Db !
Fonctionne niquel ! un grand merci…
sur le forum de prestashop : 3 messages : pas de réponses.
ici 1 message : 1 réponse et qui fonctionne !!
Allez encore une suggestion : un p’tit tuto sur la protection des requêtes / et des variables post.
genre : htmlspecialchars / htmlentities / mysql_real_escape_string()
Ne jamais faire d’insert ou d’update sans ce genre de fonctions php.
Merci @++
bonjour! est-ce que quelqu’un peut me dire comment récupérer des valeurs dans une base de donne ensuite les insérant dans un tableau pré-conçu sur html?merci beaucoup.
C’est l’objet de ce tutoriel !
Bonjour,
Sur prestashop je souhaite utiliser 2 templates différents pour ma page produit afin de realiser des test avec google analytics.
50% du trafic est redirigé vers le template 1, et 50% vers le template 2.
J’aurai donc deux pages différentes. Mais comment puis-je différencier les 2 url avec une requête AJAX ?
Merci
François
Bonjour,
Je ne comprend vraiment… si la requête j’ai bien compris mais ou ? dois-je le mettre pour qu’il fonctionne ???? et comment l’appeler dans mes fichiers .tpl ?
C’est là je suis plus là ?
Merci d’avance pour votre réponse.
La requête est normalement à mettre dans une fonction qui sera dans une classe, sinon tu peux tout de même mettre ta requête dans le controlleur.
Bonjour,
Je bloque moi même à cet endroit, si je veux afficher le résultat d’une requête dans un .tpl
Je choisi une class ex. manufacturer je rajoute ma fonction (même si c’est pas très propre) et ensuite comment l’afficher dans la page de mon choix ?
Merci d’avance pour votre réponse !
Bonjour,
Je ne comprend (pas) vraiment… si la requête j’ai bien compris mais ou ? dois-je le mettre pour qu’il fonctionne ???? et comment l’appeler dans mes fichiers .tpl ?
C’est là je suis plus là ?
Merci d’avance pour votre réponse.
Salut eMizZ je ne connaissais pas cette requête intéressant Merci !
penses-tu qu’on puisse l’adapter pour passer tous les produits d’un site qui soit en ligne pour les passe “non disponbles à la vente” afin d’activer ensuite manuellement uniquement un petit nombre de produits ?
je trouve pas trop d’infos sur les bases et leur structure avec PS
tchao !