2008-11-04 66 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生成本身。这被称为数据抽象层。

相关问题