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

对此有疑问吗?


当前回答

旧的PHP函数“mysql_list_fields()”已弃用。所以,现在获取字段名称的最好方法是查询“SHOW COLUMNS FROM table_name [LIKE 'name']”。这里有一个小例子:

$fields = array();
$res=mysql_query("SHOW COLUMNS FROM mytable");
while ($x = mysql_fetch_assoc($res)){
  $fields[] = $x['Field'];
}
foreach ($fields as $f) { echo "<br>Field name: ".$f; }

其他回答

我在SQL Server中尝试过这个查询,这对我有用:

SELECT name FROM sys.columns WHERE OBJECT_ID = OBJECT_ID('table_name')

我以前做过这种事。

SELECT column_name
FROM information_schema.columns
WHERE table_name='insert table name here'; 

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

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

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

print_r($col_names);

你可以使用以下查询MYSQL:

SHOW `columns` FROM `your-table`;

下面是示例代码,它展示了如何在php中实现上述语法来列出列的名称:

$sql = "SHOW COLUMNS FROM your-table";
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($result)){
    echo $row['Field']."<br>";
}

关于SHOW COLUMNS FROM TABLE输出的详细信息请访问:MySQL参考。

mysql 5.1(不是5.5)中的SHOW COLUMNS使用了一个临时磁盘表。

http://dev.mysql.com/doc/refman/5.1/en/internal-temporary-tables.html http://dev.mysql.com/doc/refman/5.1/en/show-columns.html

所以在某些情况下,它可以被认为是很慢的。至少,它可以提高created_tmp_disk_tables的值。假设每个连接或每个页面请求都有一个临时磁盘表。

SHOW COLUMNS并不是真的那么慢,可能是因为它使用了文件系统缓存。Phpmyadmin始终表示~0.5ms。这与服务一个wordpress页面的500 -1000毫秒相比根本不算什么。但有时还是很重要的。其中涉及到磁盘系统,你永远不知道当服务器忙、缓存满、硬盘卡住等情况下会发生什么。

通过SELECT * FROM…获取列名LIMIT 1大约0.1ms,它也可以使用查询缓存。

下面是我优化的从表中获取列名的代码,如果可能的话不使用show columns:

function db_columns_ar($table)
{
//returns Array('col1name'=>'col1name','col2name'=>'col2name',...)
if(!$table) return Array();
if(!is_string($table)) return Array();

global $db_columns_ar_cache;
if(!empty($db_columns_ar_cache[$table]))
    return $db_columns_ar_cache[$table];


//IMPORTANT show columns creates a temp disk table
$cols=Array();
$row=db_row_ar($q1="SELECT * FROM `$table` LIMIT 1");
if($row)
    {
    foreach($row as $name=>$val)
        $cols[$name]=$name;
    }
else
    {
    $coldata=db_rows($q2="SHOW COLUMNS FROM `$table`");
    if($coldata)
        foreach($coldata as $row)
            $cols[$row->Field]=$row->Field;
    }
$db_columns_ar_cache[$table]=$cols;
//debugexit($q1,$q2,$row,$coldata,$cols);
return $cols;
}

注:

只要您的表的第一行不包含兆字节范围的数据,它应该工作正常。 函数名db_rows和db_row_ar应该替换为特定的数据库设置。