Fatal error
Résolu
danielos77
Messages postés
108
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
La requête suivante :
me donne l'erreur suivante :
Fatal error: Uncaught PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column '$ChoixStage' in 'where clause' in /home/public_html/AEM/Inscription.php:449 Stack trace: #0 /home/public_html/AEM/Inscription.php(449): PDO->query('SELECT CoutHebe...') #1 {main} thrown in /home/public_html/AEM/Inscription.php on line 449
Alors que dans ma table, il y a bien les colonnes NumStage et CoutHergement, que la variable $ChoixStage est bien là aussi (testée et affichée dans le formulaire avant).
Je ne vois pas où est le souci.
Lorsque je lance la requête dans phpMyadmin en remplaçant la variable par sa valeur, c'est bon, j'ai bien le résultat qui s'affiche et lorsque je remplace la variable par sa valeur dans le script, j'ai une erreur différente qui est :
Notice: Undefined variable: CoutHebergement in /home/public_html/AEM/Inscription.php on line 453
line 449 : $reponse = $bdd->query('SELECT CoutHebergement FROM Stages_AEM WHERE NumStage=$ChoixStage');
line 453 : echo $CoutHebergement.',00 € par personne pour la durée du stage.';
J'ai tenté de mettre des ` aux noms des colonnes et de la table mais sans plus de succès.
En mettant des " autour de la variable $ChoixStage, il n'y a plus l'erreur mais rien ne s'affiche non plus (je précise qu'il y a une valeur à afficher... lol)
Merci d'avance.
Daniel
La requête suivante :
<?php //activation de l'affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //on inclut le fichier de connexion à la bdd require_once "secure/cnxBdd.php"; $reponse = $bdd->query('SELECT CoutHebergement FROM Stages_AEM WHERE NumStage=$ChoixStage'); while ($donnees = $reponse->fetch()) if(!empty($donnees)){ echo $CoutHebergement.',00 € par personne pour la durée du stage.'; } $reponse->closeCursor(); // Termine le traitement de la requête ?>
me donne l'erreur suivante :
Fatal error: Uncaught PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column '$ChoixStage' in 'where clause' in /home/public_html/AEM/Inscription.php:449 Stack trace: #0 /home/public_html/AEM/Inscription.php(449): PDO->query('SELECT CoutHebe...') #1 {main} thrown in /home/public_html/AEM/Inscription.php on line 449
Alors que dans ma table, il y a bien les colonnes NumStage et CoutHergement, que la variable $ChoixStage est bien là aussi (testée et affichée dans le formulaire avant).
Je ne vois pas où est le souci.
Lorsque je lance la requête dans phpMyadmin en remplaçant la variable par sa valeur, c'est bon, j'ai bien le résultat qui s'affiche et lorsque je remplace la variable par sa valeur dans le script, j'ai une erreur différente qui est :
Notice: Undefined variable: CoutHebergement in /home/public_html/AEM/Inscription.php on line 453
line 449 : $reponse = $bdd->query('SELECT CoutHebergement FROM Stages_AEM WHERE NumStage=$ChoixStage');
line 453 : echo $CoutHebergement.',00 € par personne pour la durée du stage.';
J'ai tenté de mettre des ` aux noms des colonnes et de la table mais sans plus de succès.
En mettant des " autour de la variable $ChoixStage, il n'y a plus l'erreur mais rien ne s'affiche non plus (je précise qu'il y a une valeur à afficher... lol)
Merci d'avance.
Daniel
Configuration: Windows / Firefox 76.0
4 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
réflexe à avoir, dans ce cas-là:
réflexe à avoir, dans ce cas-là:
$sql='SELECT CoutHebergement FROM Stages_AEM WHERE NumStage=$ChoixStage'; echo $sql;
ça te montre que ta requête n'est pas bonne....
Il faut, au choix, utiliser de la concaténation de string .... soit utiliser les bonnes "quotes".
Teste ce code et regarde ce que ça affiche... de là tu dois pouvoir trouver la cause de ton erreur
Il faut, au choix, utiliser de la concaténation de string .... soit utiliser les bonnes "quotes".
Teste ce code et regarde ce que ça affiche... de là tu dois pouvoir trouver la cause de ton erreur
<?php $aaa = "danielos"; echo 'bonjour $aaa'; echo "bonjour $aaa"; echo 'bonjour ' . $aaa;
Bonjour yg_be,
C'est bien mais à part m'afficher
SELECT CoutHebergement FROM Stages_AEM WHERE NumStage=$ChoixStage
sur ma page, ça m'avance à quoi ?
A moins que ce ne soit dans la base que je doive y mettre cette instruction et non pas dans le script de ma page ...
Et dans ce cas la variable $ChoixStage n'est pas connue et en la remplaçant par sa valeur, comme je l'ai dit dans ma question, la valeur CoutHebergement correspondant s'affiche bien.
Daniel
C'est bien mais à part m'afficher
SELECT CoutHebergement FROM Stages_AEM WHERE NumStage=$ChoixStage
sur ma page, ça m'avance à quoi ?
A moins que ce ne soit dans la base que je doive y mettre cette instruction et non pas dans le script de ma page ...
Et dans ce cas la variable $ChoixStage n'est pas connue et en la remplaçant par sa valeur, comme je l'ai dit dans ma question, la valeur CoutHebergement correspondant s'affiche bien.
Daniel
Merci Jordane45,
C'est vrai que cette histoire de "quotes" c'est un peu merd... Mais bon, c'est à moi de m'y fairer et de faire attention.
ça marche aussi avec l'instruction de yg_be.
avec des simples quotes j'obtiens ce que j'avais écrit :
SELECT CoutHebergement FROM Stages_AEM WHERE NumStage=$ChoixStage
et avec des doubles quotes j'ai la valeur de la variable $ChoixStage qui s'affiche !
Bon dimanche à vous 2
Daniel
C'est vrai que cette histoire de "quotes" c'est un peu merd... Mais bon, c'est à moi de m'y fairer et de faire attention.
ça marche aussi avec l'instruction de yg_be.
avec des simples quotes j'obtiens ce que j'avais écrit :
SELECT CoutHebergement FROM Stages_AEM WHERE NumStage=$ChoixStage
et avec des doubles quotes j'ai la valeur de la variable $ChoixStage qui s'affiche !
Bon dimanche à vous 2
Daniel
dans ce contexte, l'avantage principal de toujours utiliser la même technique, c'est d'utiliser une technique familière et connue, pour ne pas tomber dans de nouveaux pièges à chaque fois.
il est vrai que les requêtes préparées sont plus performantes lorsqu'elles sont souvent sollicitées, mais elles sont également beaucoup plus sécurisées, et elles facilitent l'écriture du code.
"de ne pas mettre ma variable entre quotes", c'est faire comme la troisième méthode que Jordane te montre en #3. je trouve que c'est plus clair, entr'autres parce que les autres langages de programmation ne permettent pas ce genre de raccourci.
par exemple:
il est vrai que les requêtes préparées sont plus performantes lorsqu'elles sont souvent sollicitées, mais elles sont également beaucoup plus sécurisées, et elles facilitent l'écriture du code.
"de ne pas mettre ma variable entre quotes", c'est faire comme la troisième méthode que Jordane te montre en #3. je trouve que c'est plus clair, entr'autres parce que les autres langages de programmation ne permettent pas ce genre de raccourci.
par exemple:
$sql = "SELECT CoutHebergement FROM Stages_AEM WHERE NumStage='". $ChoixStage . "'"; $reponse = $bdd->query($sql);