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 25/12/2007, 21h09   #1
Invité régulier
 
Inscription : décembre 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 13
Points : 8
Points : 8
Par défaut [SQL] Requête SELECT avec un paramètre pour choisir une colonne

Bonjour,

J'essaie de faire une requete SELECT sur une table dont le noms des colonne est un paramètre. je ne parviens pas à obtenir une syntaxe correcte. Voici les détails de mon problème. J'espère que vous pourrez me trouver une petite piste pour progresser. Merci !


Table "series" : id | nom | ... | A | B | C | D | ...

où A, B, C sont des colonnes correspondantes aux utilisateurs du site. Elles contiennet un simple champ booléen permettant de savoir si l'utilisateur "A" possède l'article "id" ou non, en sachant que plusieurs utilisateurs (A,B,C,..) peuvent l'avoir simultanément.

Je voudrais faire une requête en sélectionnant les données concernant à mon utilisateur et donc recueillir les infos juste d'une colonne - disons B - et pas toutes les colonnes :

$parametre = $_SESSION['mon_id']
$sql = "SELECT id,nom,$parametre FROM series";

et puis je tente de récupérer les données avec la variable

$data['$parametre'] (pour obtenir $data['B'] )

mais sans succès. Ni pour la requête, ni pour la suite...

Pourriez-vous me conseillez ?

Merci !

Stéphane
svergeylen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2007, 06h58   #2
jnore
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Salut,

As tu fait un echo de la variable $sql pour voir si ta requete est bien formatée?

Fais attention aussi, car certains SGBDR ont besoins de guillemets sur certains champ dès lors qu'ils sont en majuscule. Ce qui fait que j'écrirais:

Code :
1
2
 
$sql = 'SELECT id,nom,"'.$parametre.'" FROM series';
ou cela:

Code :
1
2
 
$sql = "SELECT id,nom,\"".$parametre."\" FROM series";
Commence déjà à vérifier ça, après on verra la recupération de ta donnée dans ta variable $data.
  Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2007, 09h52   #3
Invité régulier
 
Inscription : décembre 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 13
Points : 8
Points : 8
OKi, merci, je vais essayer cela de suite !

A tout de suite ... ;-)
svergeylen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2007, 10h11   #4
Invité régulier
 
Inscription : décembre 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 13
Points : 8
Points : 8
Voilà, je progresse mais cela ne fonctionne toujours pas :

Code :
1
2
3
 
$sql = "SELECT sid,nom,lettre,".$_SESSION['pid'].",".$_SESSION['amis']." FROM series ORDER BY lettre,nom"; 
echo("<p>PID=".$_SESSION['pid']." et AMIS=".$_SESSION['amis']." et Requête : ".$sql."</p>");
ce qui affiche :
PID=1 et AMIS=2,3 et Requête : SELECT sid,nom,lettre,1,2,3 FROM series ORDER BY lettre,nom

ce qui est correct. Le problème, c'est de pouvoir accéder aux données dans les colonnes nommées 1, 2 ou 3. Voici le test qui illustre le mieux le problème :

Code :
1
2
3
 
$req = mysql_query($sql) or die('Erreur SQL <br>'.$sql.'<br>'.mysql_error());
print_r($d = mysql_fetch_assoc($req));
qui donne :
Array ( [sid] => 8 [nom] => 421 [lettre] => 4 [1] => 1 [2] => 2 [3] => 3 )

alors que ma banque de données est pour le moment toujours nulle partout et donc je devrais obtenir :
... [1] => 0 [2] => 0 [3] => 0

mais apparement, la valeur affichée semble prendre le nom de la colonne... :-(

Si vous pouviez me mettre sur la voie, ce serait vraiment génial... je suppose un problème de guillemets ou quelque chose dans la syntaxe...

Le but final est de pouvoir utiliser les données de cete manière :
Code :
1
2
3
 
$d = mysql_fetch_assoc($req);
$d[$_SESSION['pid']]
pour accéder aux colonnes.

Ps : voici mon fichier complet en attach, si besoin. MERCI !
Fichiers attachés
Type de fichier : php touteslesseries.php (2,1 Ko, 2 affichages)
svergeylen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2007, 13h37   #5
jnore
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Je pense que tu devrais maintenant filtrer sur les champs en question:

Tu disais que tes colonnes étaient des champs booléen.
Donc tu devrais avoir une requete du style:

Code :
1
2
3
 
 
$sql="select...from series WHERE ".$parametre."=true";
Fais attention, comme apparemment tu as un tableau que tu recupères de ta session, il va certainement falloir casser ce tableau pour filtrer chacun des champs.
  Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2007, 14h19   #6
Invité régulier
 
Inscription : décembre 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 13
Points : 8
Points : 8
Merci pour la réponse...

J'aurais encore une question pour avancer...

Comment puis-je fair pour faire focntionner une instruction comme
Code :
$data[$_SESSION['pid']]
où $_SESSION['pid'] = "B"; par exemple
de manière à avoir la valeur de $data['B'] au final
svergeylen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2007, 17h36   #7
jnore
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Si $data correspond à la variable qui récupère les données d'une requete alors ce que tu as écrit devrait fonctionner.

ex:


Code :
1
2
3
4
5
6
7
 
$variable=$_SESSION['pid'];
 
while($data=mysql_fetch_assoc($req))
    {
    echo $data[$variable];
    }
là encore fais bien attention que le contenu de $_SESSION['pid'] ne soit pas un array sinon ca ne fonctionnera pas!
  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 16h42.


 
 
 
 
Partenaires

Hébergement Web