[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
toto - 16 févr. 2009 à 16:43
A voir également:
- [PHP] inclure variable dans requête SQL
- Easy php - Télécharger - Divers Web & Internet
- Blob sql ✓ - Forum Webmastering
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp ✓ - Forum Word
- Erreur lors de l'envoi de la requête facebook marketplace - Forum Facebook
4 réponses
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);
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);
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
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!
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!