IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] Construction d'une requête à partir d'une requête


Sujet :

PHP & Base de données

  1. #1
    Pgs
    Pgs est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Points : 100
    Points
    100
    Par défaut [SQL] Construction d'une requête à partir d'une requête
    Bonjour,

    Dans mon programme php, je voudrais construire certaines requêtes à partir de "blocs" figurant dans une table "MODULES_REQUETES".

    Je m'explique :

    1. Ma table "MODULES_REQUETES" contient les chaînes suivantes :
    "WHERE champ2=....."
    "LEFT JOIN champ1..."
    etc...

    2. Je récupère certains de ces champs et je les place dans la variable $conditions.

    3. Je construit ma requête
    $requete="SELECT..... ".$conditions;

    Mais j'ai un problème : alors que php remplace naturellement, dans une requête saisie normalement, '$var' par 'valeur de la variable $var', il ne le fait plus lorsque j'utilise la méthode décrite ci-dessus ($var est alors interprété comme la chaîne "$var").

    C'est dommage car le fait de construire une requête à partir d'une requête me simplifierait parfois la vie...

    J'ai donc deux questions :
    - quelqu'un a t'il compris ce que je viens d'essayer de décrire (j'ai eu du mal) ?
    - si oui : ce quelqu'un a t'il une réponse ?

    Merci par avance

    Philippe

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 239
    Points : 15 539
    Points
    15 539
    Par défaut
    tu peux utiliser la fonction http://php.net/sprintf avec des requêtes de ce genre :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM `table` WHERE id = '%s'

  3. #3
    Pgs
    Pgs est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Points : 100
    Points
    100
    Par défaut
    Merci.

    Mais je n'ai pas bien compris ton idée.

    Voici ma situation :

    1er cas : $req= "select... where id='$monid' " : ça marche.

    2ème cas :
    - ma table MODULES_REQUETES contient, dans un champ varchar, la chaîne " where id= '$monid' "
    - je lance une requête pour récupérer ce champ dans $condition
    - $req="select...".$condition
    Ca ne marche plus car il recherche la chaîne "$monid" et non plus la valeur de $monid.

    Comment utiliser sprintf pour résoudre ce pb ?

    A plus

    Phil

  4. #4
    Membre averti
    Avatar de UNi[FR]
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2002
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juin 2002
    Messages : 340
    Points : 448
    Points
    448
    Par défaut
    oui c'est normal, quand tu recharge ta requete depuis MySQL il prend $monid pour du text et non comme du code PHP

    il faudrait que tu utilise des mots clefs ex : {ID} et qu'aprés avec un regexp tu remplace les mots clefs par les bonnes valeurs


    Edit :

    essaye en mettant
    Gnarf !
    Mon C.V.
    Culture agile && Software Craftsmanship && (.NET {VS 2019 && WPF} || PHP {(PHPStorm || VS Code) && (Docker)})

    Pensez au TAG

  5. #5
    Pgs
    Pgs est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Points : 100
    Points
    100
    Par défaut
    - est que "WHERE id='${monid}'" est la chaîne qui doit être dans ma base ?

    - comment dois je utiliser regexp pour qu'au final, php comprenne '$monid'

    Merci

  6. #6
    Membre averti Avatar de jota5450
    Inscrit en
    Janvier 2006
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Janvier 2006
    Messages : 263
    Points : 332
    Points
    332
    Par défaut
    slt...

    si j´ai bien compris, tu veus prendre le resultat, qui est dans une colonne, pour ensuite faire une nouvelle requete?

    si oui, passe par une requête préparé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT @a:=  ZZZ from ..... ;
    set @s= concat("select * from xxx ", @a);
    prepare stmt from @s;
    execute stmt;
    deallocate prepare stmt;
    j´ai mis seulement la parti sql.

  7. #7
    Pgs
    Pgs est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Points : 100
    Points
    100
    Par défaut
    Merci pour ta réponse, ma mon problème n'est pas tout à fait là.

    Le voici :

    Code version 1 : $req="select ... where '$info'=...."
    Dans ce cas, php interprète $info comme une variable.

    Code version 2 : $req="select ....".$condition
    $condition contient la chaîne "where '$info'= ". Mais cette chaîne ayant été récupérée par une requête et non pas saisie dans mon fichier php, php n'interprète pas '$info' comme une variable mais comme une chaîne.

    Je pense que UNi[FR] a cerné mon pb, mais je n'arrive pas à comprendre comment utiliser sa réponse.

    Phil

  8. #8
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 239
    Points : 15 539
    Points
    15 539
    Par défaut
    voilà un exemple d'utilisation de sprintf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $requete = 'SELECT * FROM `table` WHERE id = \'%s\'';
    $requete2 = sprintf($requete, $id);
    // si $id = 3, $requete2 contient maintenant :
    // SELECT * FROM `table` WHERE id = '3'
    tu trouveras d'autres exemples dans la documentation officielle

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/04/2011, 14h38
  2. [Batch] Créer une chaine à partir d'une variable et d'une autre chaine
    Par mlle lain dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 10/11/2009, 16h26
  3. Saisir une image à partir d'une photo ou d'une vidéo
    Par lohengrin56 dans le forum Flash/Flex
    Réponses: 0
    Dernier message: 07/07/2009, 16h17
  4. Réponses: 2
    Dernier message: 05/01/2009, 12h45
  5. Réponses: 5
    Dernier message: 22/05/2008, 14h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo