Page 1 sur 1

Problème avec une requête SQL dynamique

Posté : 09 sept. 2011, 11:52
par damien01
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.

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

Posté : 09 sept. 2011, 12:02
par macgawel
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);

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

Posté : 09 sept. 2011, 12:12
par damien01
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 :)