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, PECL mysql:1.0)
mysql_num_fields — devuelve el número de campos de un resultado
Descripción
int mysql_num_fields
( int $id_resultado
)
mysql_num_fields() devuelve el número de campos de un identificador de resultado.
Ver también: mysql_db_query(), mysql_query(), mysql_fetch_field(), mysql_num_rows().
Example #1 Ejemplo de mysql_num_fields()
<?php
$result = mysql_query("SELECT id,email FROM people WHERE id = '42'");
if (!$result) {
echo 'Could not run query: ' . mysql_error();
exit;
}
/* returns 2 because id,email === two fields */
echo mysql_num_fields($result);
?>
Por razones de compatibilidad puede usarse también mysql_numfields(). Sin embargo esta función es obsoleta.
mysql_num_fields
php at jezusisheer dot nl
30-Mar-2007 01:10
30-Mar-2007 01:10
tharkey at tharkey dot net
19-Jun-2003 01:26
19-Jun-2003 01:26
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 (' / ');
}
apass AT passmoore DOT com
01-Oct-2002 05:52
01-Oct-2002 05:52
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.
matt at iwdt dot net
23-Sep-2001 08:09
23-Sep-2001 08:09
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
bwark at stanford dot edu
24-Dec-2000 04:56
24-Dec-2000 04:56
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.
