Connaitre le nombre puis le nom des champs d'une table

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 : Connaitre le nombre puis le nom des champs d'une table

describe

par bruno.rotrou » 05 mai 2008, 09:22

merci a vous tous pour ces lumieres

j'en prend bonne note
A+

par zeus » 04 mai 2008, 14:46

Si tu fait un DESCRIBE, il ne faut pas utiliser mysql_name_fields().
Cette fonctionne retourne le nom des champs qui sont dans le résultat. Or, pour un DESCRIBE, le résultat est le nom des champs de la table.

J'illustre mes propos :
J'ai fait un DESCRIBE sur la table dc_categorie d'une installation dotclear standard

Code : Tout sélectionner

mysql> DESCRIBE dc_categorie; +-----------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+--------------+------+-----+---------+----------------+ | cat_id | int(11) | NO | PRI | NULL | auto_increment | | cat_libelle | varchar(255) | NO | UNI | | | | cat_desc | longtext | YES | | NULL | | | cat_libelle_url | varchar(255) | NO | UNI | | | | cat_ord | int(11) | YES | | NULL | | +-----------------+--------------+------+-----+---------+----------------+ 5 rows in set (0.00 sec) mysql>
Pour obtenir le nom des champs sur ce résultat, il ne faut pas utiliser mysql_name_fields() car il me retournerais la ligne d'en-tête, à savoir (Field; Type; Null; Key; Default; Extra)

Le code permettant de récupérer la liste des champs avec une requête DESCRIBE est le suivant :
$str_requete = "DESCRIBE dc_categorie";
$o_result = mysql_query($str_requete);

echo "Champs de la table:<br />";
while( $a_result = mysql_fetch_array($o_result) )
{
	echo "->".$a_result['Field']."<br />";
}

DESCRIBE table

par bruno.rotrou » 04 mai 2008, 12:42

salut
j'viens de regarder DESCRIBE table , mais on retombe ds le meme probleme, cette commande nous fournis les informations sur les colonnes de la table mais tjrs pas d'acces direct aux nom des champs.

je comprend tjrs pas pourquois je suis obligé d'utiliser SELECT * FROM table ds la requete pour obtenir le nom de mes champ avec mysql_name_fields
et on as deux commandes qui renvois la meme chose , a savoir les info sur la table avec

SHOW FIELDS FROM
et
DESCRIBE
??????????????????????????????
A+

par Cyrano » 03 mai 2008, 16:32

L'idée est originale effectivement, quoique j'utiliserais plus volontiers DESCRIBE table pour ensuite compter les lignes retournées, c'est obligatoirement juste le bon nombre.

a voir

par bruno.rotrou » 03 mai 2008, 16:09

salut
en cherchant un peu, car j'aime pas coder bettement (bien que souvent je n'ai pas le choix vu mon niveau :wink: ) j'ai fouillé et j'ai trouvé ca, j'ai pas tout compris mais peut etre que tu sera meilleur.

lire le premier commentaire

http://www.php.net/manual/fr/function.m ... fields.php

A+

par zeus » 03 mai 2008, 14:08

bonjour,

Je ne pense pas que ça vienne du SHOW FIELDS, mais de l'utilisation de la méthode mysql_field_name() sur le résultat de cette requête.

Essaye de faire un parcours "standard" du résultat de la requête (avec un while( $row = mysql_fetch_array() ) )

Connaitre le nombre puis le nom des champs d'une table

par bruno.rotrou » 03 mai 2008, 14:02

bonjour
voila je code une requete pour connaitre le nombre puis le nom des champs d'une table, et j'ai un comportement bizarre

lorsque je code la chose suivante
$RST=mysql_query("SHOW FIELDS FROM {$table}");
					
					echo mysql_num_fields($RST);
					// initialise une var $TT resultat du nombre de champs 
					$TT=(mysql_num_fields($RST)-1);
					
					// boucle de lecture des noms de champs 
					for ($i=0;$i<=$TT;$i++){
	
					echo "<br>".mysql_field_name($RST,$i);
	
									      }// fin for 
J'obtiens le resultat (que je n'attends pas) suivant : 6 champs :
Field
Type
Null
Key
Default
Extra
lorsque je code la chose suivante j'obtiens le bon resultat mais en faisant un SELECT * qui me selectionne tout les champs :
$RST=mysql_query("SELECT * FROM {$table}");
					
					echo mysql_num_fields($RST);
					// initialise une var $TT resultat du nombre de champs 
					$TT=(mysql_num_fields($RST)-1);
					
					// boucle de lecture des noms de champs 
					for ($i=0;$i<=$TT;$i++){
	
					echo "<br>".mysql_field_name($RST,$i);
	
									      }// fin for 
J'obtiens :5 champs
id
image
prenom
nom
emplois
qui corresponde bien a mes champs.
je ne comprend pas pourquoi : mysql_query("SHOW FIELDS FROM {$table}"); ne me renvois pas les bon champs mes les champs info sur la table avec le type etc ...
merci A+