文字

mysql_field_name

(PHP 4, PHP 5)

mysql_field_name 取得结果中指定字段的字段名

说明

string mysql_field_name ( resource $result , int $field_index )

mysql_field_name() 返回指定字段索引的字段名。result 必须是一个合法的结果标识符,field_index 是该字段的数字偏移量。

Note:

field_index 从 0 开始。

例如,第三个字段的索引值其实是 2,第四个字段的索引值是 3,以此类推。

Note: 此函数返回的字段名大小写敏感

Example #1 mysql_field_name() 例子

<?php

$link  mysql_connect ( 'localhost' "mysql_user" "mysql_password" );
$dbname  "mydb" ;
mysql_select_db ( $dbname $link )
    or die(
"Could not set  $dbname : "  mysql_error ());
$res  mysql_query ( "select * from users" $link );

echo 
mysql_field_name ( $res 0 ) .  "\n" ;
echo 
mysql_field_name ( $res 2 );
?>

以上例子将产生如下输出:

user_id
password

为向下兼容仍然可以使用 mysql_fieldname() ,但反对这样做。

参数

result

resource 型的结果集。此结果集来自对 mysql_query() 的调用。

field_offset

数值型字段偏移量。 field_offset0 开始。如果 field_offset 不存在,则会发出一个 E_WARNING 级别的错误

返回值

The name of the specified field index on success 或者在失败时返回 FALSE .

范例

Example #2 mysql_field_name() example

<?php

$link  mysql_connect ( 'localhost' 'mysql_user' 'mysql_password' );
if (!
$link ) {
    die(
'Could not connect to MySQL server: '  mysql_error ());
}
$dbname  'mydb' ;
$db_selected  mysql_select_db ( $dbname $link );
if (!
$db_selected ) {
    die(
"Could not set  $dbname : "  mysql_error ());
}
$res  mysql_query ( 'select * from users' $link );

echo 
mysql_field_name ( $res 0 ) .  "\n" ;
echo 
mysql_field_name ( $res 2 );
?>

以上例程会输出:

user_id
password

注释

Note: 此函数返回的字段名大小写敏感

Note:

为了向下兼容,可以使用下列已废弃的别名: mysql_fieldname()

参见

  • mysql_field_type() - 取得结果集中指定字段的类型
  • mysql_field_len() - 返回指定字段的长度

用户评论:

[#1] tiptonentserv at gmail dot com [2011-08-13 17:56:09]

simple sql to xml converter works with any sql query and returns the name of the table as the root element "row" as each row element and the names of the columns are your children of row. fully tested.

<?php
function sqlToXml($host,$user,$pass,$database,$tablename,$query){

    
$link   mysql_connect($host$user$pass) or die("Could not connect: " mysql_error());
    
$db     mysql_select_db($database$link) or die(mysql_error());
    
    
$result mysql_query($query);
    if(!
$result){ die('Invalid query: '.mysql_error()); }
    
    
$numOfCols mysql_num_fields($result);
    
$numOfRows mysql_num_rows($result);
    
    
$info mysql_fetch_assoc($result);
    
    
//send headers
    
header('Content-type: text/xml');
    
header('Pragma: public');        
    
header('Cache-control: private');
    
header('Expires: -1');
    
$xml '<?xml version="1.0" encoding="utf-8"?>
';
$xml.= "<{$tablename}>";

if($numOfRows > 0){
do {
$xml.= "<row>";
foreach($info as $column => $value) {
$xml.= "<{$column}>{$value}</{$column}>";
}
$xml.= "</row>";
}
while ($info = mysql_fetch_array($result));
}
$xml.= "</{$tablename}>";

mysql_free_result($result);
return $xml;

}
?>

[#2] bags [2010-07-24 15:02:35]

When using aliases, it appears impossible to discover the name of the underlying column.
select `ID` as `anAlias` from `aTable` returns 'anAlias' as the mysql_field_name(). I have tried all the mysql_field_xxx() functions and none return the real column name.

[#3] anonymous at site dot com [2008-03-09 06:13:03]

This function is slightly stupid to be honest, why not just make an array of field names... You could consolidate the two of these functions that way and it makes it a lot easier to list them when your script is dynamic.

<?php

    
function mysql_field_array$query ) {
    
        
$field mysql_num_fields$query );
    
        for ( 
$i 0$i $field$i++ ) {
        
            
$names[] = mysql_field_name$query$i );
        
        }
        
        return 
$names;
    
    }
    
    
// Examples of use
    
    
$fields mysql_field_array$query );
    
    
// Show name of column 3
    
    
echo $fields[3];
    
    
// Show them all
    
    
echo implode', '$fields[3] );
    
     
// Count them - easy equivelant to 'mysql_num_fields'
    
    
echo count$fields );

?>

[#4] blackjackdevel at gmail dot com [2007-11-13 16:13:04]

Strangely using an aproach like this:
$res=mysql_query("SELECT * FROM `orders`",$conec) or die (mysql_error());

$fields = mysql_num_fields($res);
$out="";
for ($i = 0; $i < $fields; $i++) {
$fname=mysql_field_name($res, $i);

}

 Outputted the E_Warning:
Warning: mysql_field_name() [function.mysql-field-name]: Field N is invalid for MySQL result index 

 With a lot of different number at N. But expliciting all fields instead of *. Didn't outputted the error.

 It maybe a caracteristic of this mysql database(it is from a open source application) because i never saw this in my own databases. Anyway hope this help if someone face the same strange situation

[#5] matteo.cisilino[no_more]cisilino[spm]com [2007-01-09 08:54:19]

james, why make so difficult when it's very simple :\

$numberfields = mysql_num_fields($res_gb);

   for ($i=0; $i<$numberfields ; $i++ ) {
       $var = mysql_field_name($res_gb, $i);
       $row_title .= $var;
   }

echo $row_title;

[#6] janezr at jcn dot si [2005-10-19 07:18:50]

This is another variant of displaying all columns of a query result, but with a simplified while loop.

<?php
$query
="select * from user";
$result=mysql_query($query);
$numfields mysql_num_fields($result);

echo 
"<table>\n<tr>";

for (
$i=0$i $numfields$i++) // Header
{ echo '<th>'.mysql_field_name($result$i).'</th>'; }

echo 
"</tr>\n";

while (
$row mysql_fetch_row($result)) // Data
{ echo '<tr><td>'.implode($row,'</td><td>')."</td></tr>\n"; }

echo 
"</table>\n"
?>

[#7] clinnenb at hotmail dot com [2005-08-05 08:19:10]

The following will create a PHP array, $array, containing the MySQL query results with array indexes of the same name as field names returned by the MySQL query.

while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
$i=0;
foreach ($line as $col_value) {
$field=mysql_field_name($result,$i);
$array[$field] = $col_value;
$i++;
}
}

[#8] jimharris at blueyonder dot co dot uk [2004-12-20 06:28:35]

The code in the last comment has an obvious mistake in the for loop expression.  The correct expression in the for-loop is $x<$y rather than $x<=$y...

$result = mysql_query($sql,$conn) or die(mysql_error());
$rowcount=mysql_num_rows($result);
$y=mysql_num_fields($result);
for ($x=0; $x<$y; $x++) {
   echo = mysql_field_name($result, $x).'<br>';
}

[#9] colin dot truran at shiftf7 dot com [2004-12-17 04:44:54]

T simply itterate through all the field names on a result set try using this.

$result = mysql_query($sql,$conn) or die(mysql_error());
$rowcount=mysql_num_rows($result);
$y=mysql_num_fields($result);
for ($x=0; $x<=$y; $x++) {
echo = mysql_field_name($result, $x).'<br>';
}

This is useful if you have a result set that joins several tables dynamicaly and you are never sure what all the fields will be when you come to display them.

I suggest you place this within a loop through your result rows and include a field flag check  around the echo to only show certain data types like this.

$y=mysql_num_fields($result);
while ($row=mysql_fetch_array($result)) {
  for ($x=0; $x<=$y; $x++) {
    $fieldname=mysql_field_name($result,$x);
    $fieldtype=mysql_field_type($result, $x);
    if ($fieldtype=='string' && $row[$fieldname]!='')
       echo $row[$fieldname].' , ';
   }
   echo '<br>';
}

[#10] aaronp123 att yahoo dott comm [2003-02-21 06:27:57]

You could probably elaborate on this by sending a full sql query to this function...but I titled it simple_query() because it doesn't really allow for joins.  Never the less, if you want to get a quick array full of a single row result set this is painless:

function simple_query($table_name, $key_col, $key_val) {
// open the db
$db_link = my_sql_link();
// query table using key col/val
$db_rs = mysql_query("SELECT * FROM $table_name WHERE $key_col = $key_val", $db_link);
$num_fields = mysql_num_fields($db_rs);
if ($num_fields) {
// first (and only) row
$row = mysql_fetch_assoc($db_rs);
// load up array
for ($i = 0; $i < $num_fields; $i++) {
$simple_q[mysql_field_name($db_rs, $i)] = $row[mysql_field_name($db_rs, $i)];
}
// and return
return $simple_q;
} else {
// no rows
return false;
}
mysql_free_result($db_rs);
}

**Please note that my_sql_link() is just a function I have to open up a my sql connection.**

[#11] jason dot chambes at phishie dot net [2003-02-20 18:07:24]

<?php


function searchtable($host,$user,$pass,$database,$tablename,$userquery)
{
    
$link   mysql_connect($host$user$pass) or die("Could not connect: " mysql_error());
    
$db     mysql_select_db($database$link) or die(mysql_error());
    
$fields mysql_list_fields($database$tablename$link);
    
$cols   mysql_num_fields($fields);

    for (
$i 1$i $cols$i++) {
        
$allfields[] = mysql_field_name($fields$i);
    }
    foreach (
$allfields as $myfield) {
        
$result mysql_query("SELECT * FROM $tablename WHERE $myfield like '%$userquery%' ");
        if (
mysql_num_rows($result) > 0){
            echo 
"<h3>search <i>$database</i> for <i>$userquery</i>, found match(es) in <i>$myfield</i>: </h3>\n";
            echo 
"<table border=1 align=\"center\">\n\t<tr>\n";
            for (
$i 1$i $cols$i++) {
                echo 
"\t\t<th";
                if (
$myfield == mysql_field_name($fields$i)){
                    echo 
" bgcolor=\"orange\"> ";
                } else {
                    echo 
">";
                }
                echo 
mysql_field_name($fields$i) . "</th>\n";
            }
            echo 
"\t</tr>\n";
            
$myrow mysql_fetch_array($result);
            do {
                echo 
"\t<tr>\n";
                for (
$i 1$i $cols$i++){
                    echo 
"\t\t<td> $myrow[$i] &nbsp;</td>\n";
                }
                echo 
"\t</tr>\n";
            } while (
$myrow mysql_fetch_array($result));
            echo 
"</table>\n";
        }
    }
}

searchtable($host,$user,$pass,$database,$tablename,$userquery);
?>

[#12] matt at iwdt dot net [2001-09-23 18:09:57]

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

上一篇: 下一篇: