mysql查询得到列名?

ffx8fchx  于 2021-06-18  发布在  Mysql
关注(0)|答案(21)|浏览(497)

我想在php中将mysql表的所有列名都放到一个数组中?
对此有疑问吗?

ecr0jaav

ecr0jaav16#

所有答案中最简单的解决方案:

DESC `table name`

DESCRIBE `table name`

SHOW COLUMNS FROM `table name`
wooyq4lh

wooyq4lh17#

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();
ibps3vxo

ibps3vxo18#

不推荐使用旧的php函数“mysql\u list\u fields()”。因此,现在获取字段名的最佳方法是查询“show columns from table_name[如'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; }
a14dhokn

a14dhokn19#

似乎有两种方法:

DESCRIBE `tablename`

SHOW COLUMNS FROM `tablename`

更多关于 DESCRIBE 在这里:http://dev.mysql.com/doc/refman/5.0/en/describe.html

pnwntuvh

pnwntuvh20#

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
因此,在某些情况下,它可以被认为是缓慢的。至少,它可以提高您创建的\u tmp \u disk \u tables的值。假设每个连接或每个页面请求有一个临时磁盘表。
show columns并不是很慢,可能是因为它使用了文件系统缓存。phpmyadmin一直说~0.5ms。与500-1000毫秒的wordpress页面服务相比,这算不了什么。不过,有时候这很重要。有一个磁盘系统的参与,你永远不知道会发生什么,当服务器忙,缓存已满,硬盘驱动器暂停等。
正在通过select*from检索列名。。。限制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\u rows和db\u row\u ar应替换为特定的数据库设置。

7kqas0il

7kqas0il21#

我以前也这样做过。

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

相关问题