2024年PHP开发者大会日本站

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() 返回指定字段索引的名称。

参数

result

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

field_offset

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

返回值

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

示例

示例 #1 mysql_field_name() 示例

<?php
/* users 表包含三个字段:
* user_id
* username
* password。
*/
$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 条注释

12
anonymous at site dot 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 );

?>
3
janezr at jcn dot si
19 年前
这是显示查询结果所有列的另一种变体,但使用了简化的 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"
?>
0
matt at iwdt dot net
23 年前
这是一个从表中打印出一行 <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";
}

如果有错误,请发表评论
-2
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;
-2
[email protected]
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>';
}
-2
[email protected]
21年前
<?
/*
只需调用searchtable()函数
使用这些变量,它将搜索所需的
数据库,并为每个匹配的字段
生成一个表。
*/

function searchtable($host,$user,$pass,$database,$tablename,$userquery)
{
$link = mysql_connect($host, $user, $pass) or die("无法连接: " . 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>搜索 <i>$database</i> 中的 <i>$userquery</i>,在 <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);
?>
-3
[email protected]
13年前
简单的SQL转XML转换器,适用于任何SQL查询,并将表名作为根元素返回,“row”作为每个行元素,列名是行的子元素。经过全面测试。

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

//发送头部
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;

}
?>
-3
[email protected]
17年前
奇怪的是,使用这样的方法
$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() [function.mysql-field-name]:字段N对于MySQL结果索引无效

N处有很多不同的数字。但是明确指定所有字段而不是*。没有输出错误。

这可能是这个MySQL数据库的特性(它来自一个开源应用程序),因为在我的数据库中从未见过这种情况。无论如何,如果有人遇到同样的奇怪情况,希望这能有所帮助。
-4
[email protected]
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++;
}
}
-5
bags
14年前
使用别名时,似乎无法发现底层列的名称。
select `ID` as `anAlias` from `aTable` 返回'anAlias'作为mysql_field_name()。我已经尝试了所有mysql_field_xxx()函数,但没有一个返回真实的列名。
-5
[email protected]
19 年前
要简单地迭代结果集中的所有字段名,请尝试使用此代码。

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

如果您有一个动态连接多个表的resultSet,并且在显示它们时永远不确定所有字段是什么,这将非常有用。

我建议您将其放在结果行循环内,并在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>';
}
-5
[email protected]
21年前
您可以通过向此函数发送完整的SQL查询来详细说明这一点……但我将其命名为simple_query(),因为它实际上不允许连接。尽管如此,如果您想快速获得一个包含单行结果集的完整数组,这很简单。

function 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