我想让所有的mysql表的col名称在php数组?

对此有疑问吗?


当前回答

这个问题很老了,但我在这里寻找一种方法,以动态的方式查找给定查询的字段名(不一定只是表的字段)。由于人们在其他相关问题中一直把这个作为给定任务的答案,我在这里分享我发现的方法,使用加文·辛普森的技巧:

//Function to generate a HTML table from a SQL query
function myTable($obConn,$sql)
{
    $rsResult = mysqli_query($obConn, $sql) or die(mysqli_error($obConn));
    if(mysqli_num_rows($rsResult)>0)
    {
        //We start with header. >>>Here we retrieve the field names<<<
        echo "<table width=\"100%\" border=\"0\" cellspacing=\"2\" cellpadding=\"0\"><tr align=\"center\" bgcolor=\"#CCCCCC\">";
        $i = 0;
        while ($i < mysqli_num_fields($rsResult)){
           $field = mysqli_fetch_field_direct($rsResult, $i);
           $fieldName=$field->name;
           echo "<td><strong>$fieldName</strong></td>";
           $i = $i + 1;
        }
        echo "</tr>"; 
        //>>>Field names retrieved<<<

        //We dump info
        $bolWhite=true;
        while ($row = mysqli_fetch_assoc($rsResult)) {
            echo $bolWhite ? "<tr bgcolor=\"#CCCCCC\">" : "<tr bgcolor=\"#FFF\">";
            $bolWhite=!$bolWhite;
            foreach($row as $data) {
                echo "<td>$data</td>";
            }
            echo "</tr>";
        }
        echo "</table>";
    }
}

这可以很容易地修改为在数组中插入字段名。

使用简单的:$sql="SELECT * FROM myTable LIMIT 1"可以给你任何表的字段,而不需要使用SHOW COLUMNS或任何额外的php模块,如果需要(删除数据转储部分)。

希望这能帮助到其他人。

其他回答

编辑:今天我学到了更好的方法。请看ircmaxell的回答。


解析SHOW COLUMNS FROM表的输出;

更多信息请点击:http://dev.mysql.com/doc/refman/5.0/en/show-columns.html

如果您使用php,请使用这个要点。

它可以获得选择字段的完整信息而没有结果,以及所有自定义字段,如:

SELECT a.name aname, b.name bname, b.* 
FROM table1 a LEFT JOIN table2 b
ON a.id = b.pid;

如果上面SQL没有返回数据,还会得到字段名aname, bname, b的其他字段名

只有两行:

$query_info = mysqli_query($link, $data_source);
$fetch_fields_result = $query_info->fetch_fields();

不确定这是否是你想要的,但这对我来说很管用:

$query = query("DESC YourTable");  
$col_names = array_column($query, 'Field');

这将返回表或数组中的列名/变量名作为字符串的简单数组,这是我动态构建MySQL查询所需要的。令我沮丧的是,我根本不知道如何在PHP中很好地索引数组,所以我不确定如何处理来自DESC或SHOW的结果。希望我的回答对像我这样的初学者有帮助!

print_r($col_names);

function get_col_names(){  
    $sql = "SHOW COLUMNS FROM tableName";  
    $result = mysql_query($sql);     
    while($record = mysql_fetch_array($result)){  
     $fields[] = $record['0'];  
    }
    foreach ($fields as $value){  
      echo 'column name is : '.$value.'-';  
}  
 }  

return get_col_names();

我不是专家,但这对我有用。

$sql = "desc MyTable";
$result = @mysql_query($sql);
while($row = @mysql_fetch_array($result)){
    echo $row[0]."<br>"; // returns the first column of array. in this case Field

      // the below code will return a full array-> Field,Type,Null,Key,Default,Extra    
      // for ($c=0;$c<sizeof($row);$c++){echo @$row[$c]."<br>";}    

}