Aller au contenu

October 15, 2013

1

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
Publié par
Plus d'articles pour la catégorie Tutoriels
13 Commentaires Poster un commentaire
  1. Lucien
    Oct 25 2011

    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

    Reply
  2. shewy
    Dec 7 2011

    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.

    Reply
    • eMizZ
      Dec 7 2011

      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 !

      Reply
      • shewy
        Dec 7 2011

        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 @++

        Reply
  3. willy401
    Jun 5 2012

    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.

    Reply
    • Jun 6 2012

      C’est l’objet de ce tutoriel !

      Reply
  4. francois
    Oct 3 2012

    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

    Reply
  5. Steph
    Nov 9 2012

    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.

    Reply
    • Nov 14 2012

      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.

      Reply
      • Sangria
        Oct 3 2013

        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 !

        Reply
  6. Steph
    Nov 9 2012

    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.

    Reply
  7. hugo
    Oct 18 2013

    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 !

    Reply

Trackbacks & Pingbacks

  1. Module Prestashop gratuit : les derniers billets WordPress | Ve-Blog

Partagez votre opinion, postez un commentaire.

(requis)
(requis)

Note: Le HTML est autorisé. Votre e-mail (ne sera pas publié).

S'abonner aux commentaires


+ 2 = 7