Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 24/02/2011, 15h31   #1
Invité de passage
 
sandrine
Inscription : février 2011
Messages : 11
Détails du profil
Informations personnelles :
Nom : sandrine

Informations forums :
Inscription : février 2011
Messages : 11
Points : 1
Points : 1
Par défaut variable dans une requête sql

Bonjour à tous,

J'essaye de faire une requête en mettant à la place du nom de champ une variable. Ça devrait pas si compliqué pourtant… Et pourtant je m'arrache les cheveux depuis plusieurs heures…
J'ai relu en long en large le cours sur l'utilisation apostrophe/guillemets et puis j'ai testé toutes les possibilités (bêtement mais je ne voyais plus quoi faire :-), successivement, comme ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
$reponse = $bdd->query("SELECT idRubriqueTuto FROM $table1"); //NON
$reponse = $bdd->query("SELECT idRubriqueTuto FROM \"$table1\""); //NON
$reponse = $bdd->query("SELECT idRubriqueTuto FROM"." ".$table1); //NON
$reponse = $bdd->query("SELECT idRubriqueTuto FROM ".$table1); //NON
$reponse = $bdd->query("SELECT idRubriqueTuto FROM {$table1}"); //NON
 
$reponse = $bdd->query('SELECT idRubriqueTuto FROM $table1'); // NON
$reponse = $bdd->query('SELECT idRubriqueTuto FROM "$table1"'); // NON
$reponse = $bdd->query('SELECT idRubriqueTuto FROM \"$table1\"'); // NON
$reponse = $bdd->query('SELECT idRubriqueTuto FROM '.$table1); // NON
Mais rien n'y fait. Je précise que quand je met direct le nom du champ de ma table, ça fonctionne.

Au secours !
Ça viendrait donc pas d'un problème de syntaxe ?

Merci par avance
labobinette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 15h37   #2
Membre éclairé
 
Homme
Développeur Sharepoint/Biztalk
Inscription : octobre 2008
Messages : 500
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur Sharepoint/Biztalk

Informations forums :
Inscription : octobre 2008
Messages : 500
Points : 398
Points : 398
Les variables PHP sont entre cotes dans les requêtes .. me semble pas avoir vu :

Code :
$reponse = $bdd->query("SELECT idRubriqueTuto FROM '$table1'");
ou alors :

Code :
$reponse = $bdd->query("SELECT idRubriqueTuto FROM '".$table1."'");
L dernière solution est plus propre ...
bob633 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/02/2011, 15h37   #3
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
As-tu simplement verifié ce que valait $table1 et quelle erreur provoquait ta requête precisemment ?

Sinon pour les syntaxes :
Code :
1
2
3
4
5
6
7
8
9
10
$reponse = $bdd->query("SELECT idRubriqueTuto FROM $table1"); // correct
$reponse = $bdd->query("SELECT idRubriqueTuto FROM \"$table1\""); // incorrect, il n'y a pas de guillemet autour des noms de table
$reponse = $bdd->query("SELECT idRubriqueTuto FROM"." ".$table1); // correct mais inutile
$reponse = $bdd->query("SELECT idRubriqueTuto FROM ".$table1); // correct
$reponse = $bdd->query("SELECT idRubriqueTuto FROM {$table1}"); //correct mais inutile
 
$reponse = $bdd->query('SELECT idRubriqueTuto FROM $table1'); // incorrect : les variables ne sont pas interpretées entre guillemets simples
$reponse = $bdd->query('SELECT idRubriqueTuto FROM "$table1"'); // idem
$reponse = $bdd->query('SELECT idRubriqueTuto FROM \"$table1\"'); // idem
$reponse = $bdd->query('SELECT idRubriqueTuto FROM '.$table1); // correct
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 15h56   #4
Invité de passage
 
sandrine
Inscription : février 2011
Messages : 11
Détails du profil
Informations personnelles :
Nom : sandrine

Informations forums :
Inscription : février 2011
Messages : 11
Points : 1
Points : 1
Tout d'abord, merci pour vos réponses.

Sabotage, pour cette requête-ci, par exemple :
Code :
1
2
 
$reponse = $bdd->query("SELECT idRubriqueTuto FROM ".$table1); // correct
J'ai comme message d'erreur que la variable n'existe pas.
J'ai fait un echo sur cette variable, en effet, elle n'est pas vue.

La requête se trouve dans un bloc try, qui lui-même se trouve dans une fonction.
La variable $table1 est définie à l'extérieur de cette fonction, au même niveau que l'appel de fonction (avant pour être précise).

Je pensais qu'elle serait visible de partout vu qu'elle ne se trouve pas dans un bloc d'instruction. Non ?
labobinette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 16h13   #5
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Les fonctions n'ont pas les mêmes variables que le script.
Il faut passer la variable en argument, la déclarer global ou utiliser une constante.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 16h17   #6
Invité de passage
 
sandrine
Inscription : février 2011
Messages : 11
Détails du profil
Informations personnelles :
Nom : sandrine

Informations forums :
Inscription : février 2011
Messages : 11
Points : 1
Points : 1
Ah non, je me suis trompée,
le renvoi "la variable n'existe pas" vient d'un echo que je fais plus haut pour vérifier la présence d'une autre variable.

Le message d'erreur est le suivant :
Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Toujours pour cette requête là :
Code :
1
2
 
$reponse = $bdd->query("SELECT idRubriqueTuto FROM ".$table1);
Ceci dit, il est toujours vrai que la variable n'est pas vue dans le bloc d'instruction.
J'essaye avec global mais le premier problème de syntaxe n'est pas résolut.

Dur dur
labobinette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 16h24   #7
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
J'ai déjà répondu ta syntaxe est bonne mais si $table1 ne vaut rien, la requête ne peut évidemment pas fonctionner.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 16h40   #8
Invité de passage
 
sandrine
Inscription : février 2011
Messages : 11
Détails du profil
Informations personnelles :
Nom : sandrine

Informations forums :
Inscription : février 2011
Messages : 11
Points : 1
Points : 1
Alors voilà, ça marche.
A l'intérieur du groupe d'instruction try, soit au même endroit que ma requête, j'ai mis
et ma requête est :
Code :
$reponse = $bdd->query("SELECT idRubriqueTuto FROM $table1");
J'avais essayé de mettre directement global dans la requête, comme l'une ou l'autre des lignes ci-dessous mais ça ne lui plait pas (pas de message d'erreur, rien, une page blanche). J'avoue que je ne comprend trop pourquoi. J'ai beau relire les cours, j'ai du mal avec la syntaxe…:
Code :
1
2
3
4
 
$reponse = $bdd->query("SELECT idRubriqueTuto FROM global $table1");
 
$reponse = $bdd->query("SELECT idRubriqueTuto FROM ".global. " " .$table1);
Bref, ça marche maintenant…
Merci beaucoup pour votre aide !
labobinette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 16h45   #9
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
"global" est un mot clef, il ne peut pas être traité dans une chaine de caractère.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 17h14   #10
Invité de passage
 
sandrine
Inscription : février 2011
Messages : 11
Détails du profil
Informations personnelles :
Nom : sandrine

Informations forums :
Inscription : février 2011
Messages : 11
Points : 1
Points : 1
ah… ok!
Je vais arrêter de maltraiter global
Mais il me le rend bien.

Merci pour ces éclaircissements.
labobinette est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h39.


 
 
 
 
Partenaires

Hébergement Web