Problème avec une requête SQL dynamique

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème avec une requête SQL dynamique

Re: Problème avec une requête SQL dynamique

par damien01 » 09 sept. 2011, 12:12

Merci beaucoup Macgawel.

Je cherchais midi à quatorze heures alors qu'effectivement je n'ai pas à me casser la tête.
Tes solutions sont pertinentes.

Merci beaucoup :)

Re: Problème avec une requête SQL dynamique

par macgawel » 09 sept. 2011, 12:02

Bonjour.

1. Pourquoi ne pas faire bêtement un SELECT * (tu n'es pas obligé d'utiliser tous les champs récupérés) ?

2. $fields est un tableau qui contient les champs à récupérer ?
=> tu peux voir la fonction implode().

3. Si tu veux garder ton code, tu peux te contenter de supprimer le dernier caractère de ta chaîne $table_fields :
substr($table_fields,0,-1);

Problème avec une requête SQL dynamique

par damien01 » 09 sept. 2011, 11:52

Bonjour,

J'ai une fonction qui me permet de renvoyer tous les noms de champs d'une tables sql en excluant les clés primaires.

Je voudrais alors pouvoir exploiter le retour de cette fonction pour générer une requête SQL plus ou moins dynamique dans le sens ou celle-ci évolue selon la table en question.

Cette table contient un ensemble de champs qui me permettent de savoir si tel utilisateur à les permissions d’accéder/exécuter à la fonctionnalitée associée.

Pour le moment lorsque je teste ceci :
$fields = get_fields_table_rights();
while (list(, $value) = each($fields)) {
	echo "$value <br />\n";
}
J'obtiens bien la liste des noms de champs:
modify_news
manage_users
manage_history
Je souhaiterais maintenant pouvoir faire une requête avec les noms des champs que je récupère.

Actuellement j'ai ceci:
$query = @mysqli_query($bdd, "select modify_news, manage_users, manage_history
						from rights r, groups g, users u  
						where u.groupname = g. groupname 
						and r.permission = g.permission
						and u.login = '".$login."';");
J'ai donc les noms de mes champs écris en dure.

La où je bloque pour remplacer ces valeurs par celles récupérées préalablement, c'est avec les ',' dans ma requête.

Je pourrais faire:
$fields = get_fields_table_rights();
$table_fields ='';
while (list(, $value) = each($fields)) {
	$table_fields .= $value . ", ";
}
$query = @mysqli_query($bdd, "select ".$table_fields."
						from rights r, groups g, users u  
						where u.groupname = g. groupname 
						and r.permission = g.permission
						and u.login = '".$login."';");

Seulement j'aurais une erreur SQL car mon dernier champ aurait une ','.

Auriez vous des idées?

En vous remerciant par avance.

Damien B.