使用 mysql_fetch_field,您可以生成更强大的 mysql_fetch_assoc 版本。
当查询具有相同字段名的两个表时,通常需要使用 mysql_fetch_row 获取整数键数组,而不是关联键数组。这是因为第二个表中具有相同名称的字段将覆盖从第一个表返回的数据。
但是,这个简单的函数将在键之前插入表名,并防止交叉。
即 SELECT *,'test' AS test 4 FROM table AS T_1,table AS T_2 WHERE T_1.a=T_2.b
可能会产生
mysql_fetch_assoc() 返回
array(
'index'=>2,
'a'=>'pear',
'b'=>'apple',
'test'=>'test',
4=>4
)
mysql_fetch_table_assoc() 返回
array(
'T_1.index' =>1,
'T_1.a'=>'apple',
'T_1.b'=>'banana',
'T_2.index'=>2,
'T_2.a'=>'pear',
'T_2.b'=>'apple',
'test'=>'test',
4=>4
)
<?php
function mysql_fetch_table_assoc($resource)
{
$data=mysql_fetch_row($resource);
if(!$data) return $data; $fields=array();
$index=0;
$num_fields=mysql_num_fields($resource);
while($index<$num_fields)
{
$meta=mysql_fetch_field($resource, $index);
if(!$meta)
{
$fields[$index]=$index;
}
else
{
$fields[$index]='';
if(!empty($meta->table)) $fields[$index]=$meta->table.'.';
if(!empty($meta->name)) $fields[$index].=$meta->name; else $fields[$index].=$index;
}
$index++;
}
$assoc_data=array_combine($fields, $data);
return $assoc_data;
}
?>