PHP 日本研討會 2024

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(resource $result, int $field_offset): string|false

mysql_field_name() 會傳回指定欄位索引的名稱。

參數

result

正在評估的結果 resource。此結果來自於呼叫 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
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>';
}
-2
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("無法連線:" . 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
tiptonentserv at gmail dot com
13 年前
簡單的 sql 轉 xml 轉換器,適用於任何 sql 查詢,並將資料表名稱作為根元素,每個資料列作為 row 元素,而資料行的名稱則為 row 的子元素。完全測試過。

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

$link = mysql_connect($host, $user, $pass) or die("無法連線: " . mysql_error());
$db = mysql_select_db($database, $link) or die(mysql_error());

$result = mysql_query($query);
if(!
$result){ die('無效的查詢:'.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
blackjackdevel at gmail dot com
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
Warning: mysql_field_name() [function.mysql-field-name]: 欄位 N 對於 MySQL 結果索引無效

N 的值有很多不同的數字。但是,明確列出所有欄位,而不是使用 *,則不會輸出錯誤。

這可能是這個 mysql 資料庫(來自開源應用程式)的特性,因為我從未在自己的資料庫中看到過這種情況。無論如何,希望這對遇到相同奇怪情況的人有所幫助
-4
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++;
}
}
-5
bags
14 年前
當使用別名時,似乎不可能發現基礎資料行的名稱。
select `ID` as `anAlias` from `aTable` 會傳回 'anAlias' 作為 mysql_field_name()。我已經嘗試過所有 mysql_field_xxx() 函數,但沒有任何一個會傳回實際的資料行名稱。
-5
colin dot truran at shiftf7 dot com
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>';
}

如果您有一個動態聯結多個資料表且永遠無法確定顯示它們時會出現哪些欄位結果集,這會很有用。

我建議您將其放置在循環中,遍歷您的結果列,並在 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
aaronp123 att yahoo dott comm
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