mysql_field_name

(PHP 4,PHP 5)

mysql_field_name获取结果中指定字段的名称

警告

该扩展在 PHP 5.5.0 中已弃用,并在 PHP 7.0.0 中已删除。因此,应使用 MySQLiPDO_MySQL 扩展。另请参阅 MySQL:选择 API 指南。此功能的其他选项包括

说明

mysql_field_name(资源 $result, 整数 $field_offset): 字符串|false

mysql_field_name() 返回指定字段索引的名称。

参数

结果

正在评估的结果 资源。此结果来自对 mysql_query() 的调用。

field_offset

数字字段偏移量。 field_offset0 开始。如果 field_offset 不存在,还将发布 E_WARNING 级别的错误。

返回值

成功时指定字段索引的名称,失败时为 false

示例

示例 1 mysql_field_name() 示例

<?php
/* 用户表由三个字段组成:
* 用户 ID
* 用户名
* 密码.
*/
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!
$link) {
die(
'无法连接到 MySQL 服务器:' . mysql_error());
}
$dbname = 'mydb';
$db_selected = mysql_select_db($dbname, $link);
if (!
$db_selected) {
die(
"无法设置 $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()

另请参阅

添加注释

用户贡献注释 12 条注释

网站点com 匿名
16 年前
坦白说,此函数有些愚蠢,为何不直接创建一个字段名数组?这样可以合并这两个函数,并且当脚本为动态脚本时,列出此类名称会容易很多。

<?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;

}

// 使用示例

$fields = mysql_field_array( $query );

// 显示第 3 列的名称

echo $fields[3];

// 全部显示

echo implode( ', ', $fields[3] );

// 计数 - 等同于“mysql_num_fields”

echo count( $fields );

?>
jcn.si 的 janezr
18 年前
下面给出显示查询结果所有列的另一种方式,且带有简化的 while 循环。

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

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

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

echo "</tr>\n";

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

echo "</table>\n"
?>
iwdt.net 的 matt
22 年前
这里有一种方法可以从表格中打印 <th> 标记的一行
注意:我没有测试过

$result = mysql_query("select * from table");

for ($i = 0; $i < mysql_num_fields($result); $i++) {
print "<th>".mysql_field_name($result, $i)."</th>\n";
}

如果有错误,发布一条评论
matteo.cisilino[no_more]cisilino[spm]com
17 年前
james,为什么让复杂的事情变得这么简单,就是这么简单:\

$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;
jimharris at blueyonder dot co dot uk
19 年前
上一条评论中的代码在 for 循环表达式中有一个明显的错误。for 循环中的正确表达式是 $x<$y,而不是 $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>';
}
jason dot chambes at phishie dot net
21 年前
<?
/*
只需调用 searchtable() 函数
使用这些变量,它将搜索所需的
数据库并为每个字段生成一个表,
其中有一个匹配项。
*/

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);
?>
tiptonentserv at gmail dot com
13 年前
简单的SQL到XML转换器可以处理任何SQL查询,并将表名称作为根元素“行”作为每个行元素返回,列的名称是行的子元素。经过全面测试。

<?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;

}
?>
blackjackdevel at gmail dot com
16 年前
奇怪的是,采用如下方法:
$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);

}

输出了E_Warning
警告:mysql_field_name() [函数mysql-field-name]:字段N对于MySQL结果索引无效

N中有许多不同的数字。但明确所有字段,不使用*。没有输出错误。

这或许是此MySQL数据库的一个特征(它来自一个开源应用程序),因为我从未在我的数据库中见到过这种情况。不管怎样,希望这有助于遇到相同奇怪情况的人
clinnenb at hotmail dot com
19 年前
以下代码将创建一个PHP数组$array,其中包含具有与MySQL查询返回的字段名称相同的数组索引的MySQL查询结果。

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++;
}
}
bags
14年前
在使用别名时,似乎无法发现底层列的名称。
select `ID` as `anAlias` from `aTable`将返回“anAlias”作为mysql_field_name()。我尝试了所有mysql_field_xxx()函数,但没有一个返回真实的列名称。
colin dot truran at shiftf7 dot com
19 年前
T只遍历结果集中的所有字段名称,请尝试使用此方法。

$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>';
}

如果您有一个动态连接多个表的结果集并且在显示它们时不确定所有字段是什么时,此方法非常有用。

建议您将此方法放在结果行循环中,并围绕echo放置一个字段标志检查,以仅显示特定数据类型,如下所示。

$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>';
}
aaronp123 att yahoo dott comm
21 年前
您可能会通过向此函数发送完整的sql查询来对它进行详细说明...但我将其命名为simple_query(),因为它实际上不允许连接。不过,如果您想快速获取充满单个行结果集的数组,这是不费吹灰之力的

函数 simple_query($table_name, $key_col, $key_val) {
// 打开数据库
$db_link = my_sql_link();
// 使用键列名/值查询表
$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) {
// 第一行(也是唯一一行)
$row = mysql_fetch_assoc($db_rs);
// 加载数组
for ($i = 0; $i < $num_fields; $i++) {
$simple_q[mysql_field_name($db_rs, $i)] = $row[mysql_field_name($db_rs, $i)];
}
// 并返回
return $simple_q;
} else {
// 没有行
return false;
}
mysql_free_result($db_rs);
}

**请注意,my_sql_link() 只是我需要用来打开 MySQL 连接的一个函数。**
To Top