Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/09/2007, 17h47   #1
Pgs
Futur Membre du Club
 
Inscription : avril 2004
Messages : 205
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 205
Points : 18
Points : 18
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
Pgs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2007, 21h17   #2
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
tu peux utiliser la fonction http://php.net/sprintf avec des requêtes de ce genre :
Code SQL :
SELECT * FROM `table` WHERE id = '%s'
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2007, 10h24   #3
Pgs
Futur Membre du Club
 
Inscription : avril 2004
Messages : 205
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 205
Points : 18
Points : 18
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
Pgs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2007, 10h41   #4
Membre confirmé
 
Avatar de UNi[FR]
 
nico.
Inscription : juin 2002
Messages : 327
Détails du profil
Informations personnelles :
Nom : nico.
Âge : 28

Informations forums :
Inscription : juin 2002
Messages : 327
Points : 294
Points : 294
Envoyer un message via MSN à UNi[FR]
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 !
www.uni-d.net (Wamp MSS) - Mon C.V. - Mon Blog
.NET {VS 2010 && LINQ} && PHP {(Zend Studio || Notepad++) && (WAMP || WAMP mss)} && Multimédia {Flash CS5 && Photoshop CS5}

Pensez au TAG
UNi[FR] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2007, 11h01   #5
Pgs
Futur Membre du Club
 
Inscription : avril 2004
Messages : 205
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 205
Points : 18
Points : 18
- 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
Pgs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2007, 11h05   #6
Membre éclairé
 
Avatar de jota5450
 
Jota Alves
Inscription : janvier 2006
Messages : 263
Détails du profil
Informations personnelles :
Nom : Jota Alves
Âge : 36

Informations forums :
Inscription : janvier 2006
Messages : 263
Points : 303
Points : 303
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 :
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.
jota5450 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2007, 14h23   #7
Pgs
Futur Membre du Club
 
Inscription : avril 2004
Messages : 205
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 205
Points : 18
Points : 18
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
Pgs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2007, 15h24   #8
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
voilà un exemple d'utilisation de sprintf
Code :
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
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h34.


 
 
 
 
Partenaires

Hébergement Web