Note that, if you want to get the amount of columns of a table and you're using the "SHOW COLUMNS FROM $table" query, you will have to use mysql_num_rows() instead of mysql_num_fields() on the result. This becomes logical when thinking about it, because the SHOW COLUMNS query returns a result with six columns (Field, Type, Null, Key, Default and Extra) and with a single row for every column found. If you'd count the number of fields, you'd always get 6. If you count the number of rows, you'll get the amount of columns found.
mysql_num_fields
(PHP 4, PHP 5)
mysql_num_fields — Retourne le nombre de champs d'un résultat MySQL
Cette extension est obsolète depuis PHP 5.5.0, et sera supprimée dans le futur. À la place, les extensions MySQLi ou PDO_MySQL doivent être utilisées. Voir aussi le guide MySQL : choix de l'API ainsi que la FAQ associée pour plus d'information. Voici les alternatives à cette fonction :
Description
$result
)Retourne le nombre de champs d'une requête.
Liste de paramètres
-
result -
La ressource de résultat qui vient d'être évaluée. Ce résultat vient de l'appel à la fonction mysql_query().
Valeurs de retour
Retourne le nombre de champs d'un jeu de résultat en cas de succès ou FALSE si une erreur survient.
Exemples
Exemple #1 Exemple avec mysql_num_fields()
<?php
$result = mysql_query("SELECT id,email FROM people WHERE id = '42'");
if (!$result) {
echo 'Impossible d\'exécuter la requête : ' . mysql_error();
exit;
}
/* Retourne 2 car id,email === 2 champs */
echo mysql_num_fields($result);
?>
Notes
Note:
Pour des raisons de compatibilité ascendante, l'alias obsolète suivant peut être utilisé : mysql_numfields()
Voir aussi
- mysql_select_db() - Sélectionne une base de données MySQL
- mysql_query() - Envoie une requête à un serveur MySQL
- mysql_fetch_field() - Retourne les données enregistrées dans une colonne MySQL sous forme d'objet
- mysql_num_rows() - Retourne le nombre de lignes d'un résultat MySQL
You can use it without a requete, just to list the fields :
$liste_champs = mysql_list_fields ( $Base, $Table, $connexion);
for ($i=0; $i < mysql_num_fields ($l_champs); $i++) {
echo ( mysql_field_name ($l_champs, $i) );
echo (' / ');
}
Adding to the last comment: you can dynamically loop through any number of columns AND rows like so-
$query="your SQL";
$result=mysql_query($query) or die("Query ($query) sucks!");
$fields=mysql_num_fields($result);
echo "<table>\n<tr>";
for ($i=0; $i < mysql_num_fields($result); $i++) //Table Header
{ print "<th>".mysql_field_name($result, $i)."</th>"; }
echo "</tr>\n";
while ($row = mysql_fetch_row($result)) { //Table body
echo "<tr>";
for ($f=0; $f < $fields; $f++) {
echo "<td>$row[$f]</td>"; }
echo "</tr>\n";}
echo "</table><p>";
This has been tested.
here's one way to print out a row of <th> tags from a table
NOTE: i didn't test this
$result = mysql_query("select * from table");
for ($i = 0; $i < mysql_num_fields($result); $i++) {
print "<th>".mysql_field_name($result, $i)."</th>\n";
}
post a comment if there's an error
If you just want the number of fields in a table, you can do something like this:
<?php
$db_id = mysql_connet();
$result = mysql_query("DESCRIBE [tableName], $db_id);
$numFields = mysql_num_rows($result);
?>
Because "DESCRIBE" returns one row for each field in the table (at least in MySQL), this will work.
