[PHP] inclure variable dans requête SQL

Résolu/Fermé
le coin-coin Messages postés 66 Date d'inscription mercredi 2 juillet 2008 Statut Membre Dernière intervention 29 novembre 2014 - 13 févr. 2009 à 11:19
 toto - 16 févr. 2009 à 16:43
Bonjour à tous,

Je voudrais inclure une variable php dans une requête SQL, j'ai essayé les syntaxes suivantes :

mysql_query("SELECT namefic FROM propriete_fic WHERE idpropfic= $id ",$cnx);

mysql_query("SELECT namefic FROM propriete_fic WHERE idpropfic= '$id' ",$cnx);

mysql_query("SELECT namefic FROM propriete_fic WHERE idpropfic= \'$id' \",$cnx);

mysql_query("SELECT namefic FROM propriete_fic WHERE idpropfic=".$id." ",$cnx);

Mais aucune ne fonctionne!

Merci de votre aide!!

4 réponses

Utilisateur anonyme
13 févr. 2009 à 11:24
vous avez connecté au base de données
0
Bonjour

Quand on veut une information sur une erreur, le mieux est de donner le message d'erreur. Enfin.
Je suppose évidemment qu'il n'y a pas de problème de connexion, que le nom de la table et des champs sont corrects... Je suppose que le problème porte uniquement sur le fait d'utiliser une variable, que quand tu le remplaces par une valeur, ça va bien.

La première devrait marcher si $id est un nombre. Si ce n'est pas un nombre, comme il n'y a pas de guillemets ni d'apostrophes autour de le valeur, le contenu de $id est pris pour un nom de champ.
La seconde devrait marcher si.. On verra plus loin
La troisième est farfelue. Dans une chaîne délimitée par des " ", le slash de \' ne sert pas à échapper le ', est est don passé tel quel à la requête. Par contre, le \" sur le double quote final sert à échapper ce double quote. Du coup, la chaîne ne s'arrête pas ici, la suite de ton code fait partie de la requête... Aïe !
La quatrième, c'est la même chose que la première. (À quoi sert l'espace ajouté à la fin ? mystère..)

Pour en revenir à la seconde, elle va marcher en général, mais pas si ta donnée contient une apostrophe. supposons que $id vaille "l'erreur" ;-)
SELECT namefic FROM propriete_fic WHERE idpropfic= '$id' devient SELECT namefic FROM propriete_fic WHERE idpropfic= 'l'erreur'
Si tu regardes la fin, tu vois que tu as WHERE idpropfic= 'l' qui est correct, mais que derrière il traîne erreur' dont mysql ne sait pas quoi faire.

Pour éviter ce genre de problème, il faut utiliser la fonction mysql_real_escape_string.

$id=mysql_real_escape_string($id);
mysql_query("SELECT namefic FROM propriete_fic WHERE idpropfic= '$id' ",$cnx);
0
le coin-coin Messages postés 66 Date d'inscription mercredi 2 juillet 2008 Statut Membre Dernière intervention 29 novembre 2014 7
16 févr. 2009 à 16:25
Merci toto pour cette réponse plutot devellopée!

J'ai fini par trouvé la solution :

$id est un nombre, j'ai donc ecris ma requete comme si desous :

mysql_query("SELECT namefic FROM propriete_fic WHERE idpropfic= $id ",$cnx);

C'est le plus simple je n'y avais pas pensé et ca fonctionne tres bien!
0
Elle a l'air très bien ta solution.
Ce que je ne comprends pas, c'est pourquoi ta solution c'est exactement la même requête que celle de ton problème.
Tu voudrais bien m'expliquer ?
0