2008-11-04 50 views
4

給定一個結果集,我該如何確定查詢中指定的字段的實際名稱(而不是它們的別名)。PHP/MySQL - 如何確定給定查詢結果中的字段名稱?

$query = "SELECT first AS First_Name, last AS Last_Name FROM people"; 
$dbResult = mysql_query($query); 

$fieldCount = mysql_num_fields($dbResult); 
for ($i=0; $i<$fieldCount; $i++) {   
    // Set some values 
    $fieldName = mysql_field_name($dbResult, $i); 
} 

該示例返回字段名稱,但在本例中它返回別名「First_Name」而不是實際字段名稱「first」。

是否有可能從這樣的查詢中獲取實際的字段名稱。特別是如果我正在寫一個函數,並且不知道將會拋出什麼查詢。

回答

0

我不是100%確定這一點,但我會說:沒有辦法。

MySQL讓您回到結果集,僅此而已。它不會返回select語句或任何有關它的細節。

因此,您無法獲取原始字段名稱,因爲服務器會爲您提供您詢問的信息:別名。

10

簡答:你不需要。

長答案:一旦數據集被MySQL拉取併發送回PHP,PHP現在唯一的信息是列或別名,如果您使用它們。沒有辦法查看結果集並確定原始列名是什麼。您必須切換到另一個數據庫驅動程序(如mysqli)來獲取此信息。

1

你的問題沒有意義。 你有什麼打算,如果你得到一個派生列做即

選擇column_a + column_b從訂單ORDER_TOTAL;

你是說你想知道原來的查詢是column_a + column b?

如果是這樣,你可能需要編寫一個查詢解析器,或者從互聯網上獲取一個。

我想實現是超出了你的問題雖然範圍:)

0

如果你不介意做第二個查詢(和你使用MySQL 5或更高版本),你可以問information_schema的名字。 退房MySQL Reference的細節:

SHOW COLUMNS FROM tbl_name;

0

如果您有權訪問查詢的字符串,您可以嘗試用正則表達式來解析它。 我不是正則表達式高手,但你可以通過看之間的「從」選擇',然後抓住所有的字段名稱要麼

field FieldAlias 

field as FieldAlias 
0

文本砍了繩子如果您正在嘗試編寫一些功能來讓您知道處理更新時要提取哪些字段,那麼正確執行此操作的唯一方法就是向上面的代碼提供一個無SQL接口,並管理所有SQL生成本身。這被稱爲數據抽象層。

相關問題