MySQL查询获取列名称?

我想获得一个MySQL表的所有col名到php中的数组?

有没有这个问题?

最好的方法是使用INFORMATION_SCHEMA元数据虚拟数据库。 特别是INFORMATION_SCHEMA.COLUMNS表…

SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='yourdatabasename' AND `TABLE_NAME`='yourtablename'; 

这是非常强大的,可以给你吨的信息,而不需要parsing文本(如列types,列是否可为空,最大列大小,字符集等)…

哦,它是标准的SQL(而SHOW ...是MySQL特定的扩展名)…

有关SHOW...和使用INFORMATION_SCHEMA表之间区别的更多信息,请查看INFORMATION_SCHEMA中的MySQL 文档,一般来说 …

您可以使用以下查询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 Refrence。

似乎有两种方法:

 DESCRIBE `tablename` 

要么

 SHOW COLUMNS FROM `tablename` 

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

我过去做过这个。

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

编辑 :今天我学到了这样做的更好方法。 请参阅ircmaxell的答案。


parsingSHOW COLUMNS FROM table;的输出SHOW COLUMNS FROM table;

这里有更多关于它的地方: http : //dev.mysql.com/doc/refman/5.0/en/show-columns.html

旧的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; } 

使用mysql_fetch_field()查看所有列数据。 见手册 。

 $query = 'select * from myfield'; $result = mysql_query($query); $i = 0; while ($i < mysql_num_fields($result)) { $fld = mysql_fetch_field($result, $i); $myarray[]=$fld->name; $i = $i + 1; } 

“警告此扩展从PHP 5.5.0开始已弃用,将来会被删除。”

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

在MySQL 5.1(不是5.5)中的SHOW COLUMNS使用临时磁盘表。

所以在某些情况下可以认为是慢的。 至less,它可以提高你的created_tmp_disk_tables值。 想象一下每个连接或每个页面请求的临时磁盘表。

SHOW COLUMNS并不是真的很慢,可能是因为它使用文件系统caching。 Phpmyadmin说〜0.5ms一贯。 这与服务一个wordpress页面的500ms-1000ms相比毫无意义。 但是,有时候还是很重要的。 有一个磁盘系统的参与,你永远不知道当服务器忙,caching满,硬盘驱动器等等发生了什么。

通过SELECT * FROM … LIMIT 1检索列名约为0.1ms,也可以使用查询caching。

所以这里是我的小优化代码来从表中获取列名,如果可能,不使用显示列

 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_rowsdb_row_ar应该replace为您的特定数据库设置。

不知道这是你在找什么,但这对我工作:

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

这将以string的forms返回表或数组中列名/variables名的简单数组,这是我需要dynamic构buildMySQL查询的。 我的沮丧是,我根本不知道如何索引PHP中的数组,所以我不知道如何处理来自DESC或SHOW的结果。 希望我的回答对像我这样的初学者有帮助!

检查结果: print_r($col_names);

试试这个我个人使用它:

 SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_name' 

当你想检查你的所有表结构与一些提交然后使用此代码。 在这个查询中,我selectcolumn_name,column_type和table_name获取更多细节。 我使用column_type的顺序,所以我可以很容易地看到它。

 SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='yourdatabasename' order by DATA_TYPE; 

如果你只想检查双重types的提交,那么你可以轻松地做到这一点

 SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME,DATA_TYPE FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='yourdatabasename' AND DATA_TYPE like '%bigint%' order by DATA_TYPE; 

在这里输入图像描述 如果你想检查哪个字段允许nulltypes等,那么你可以使用这个

 SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME,IS_NULLABLE,DATA_TYPE FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='yourdatabasename' and DATA_TYPE like '%bigint%' and IS_NULLABLE ='NO' order by COLUMN_TYPE; 

在这里输入图像描述

你想检查更多,然后thik链接也帮助你。

https://dev.mysql.com/doc/refman/5.7/en/columns-table.html

在工作中:

 global $wpdb; $table_name=$wpdb->prefix.'posts'; foreach ( $wpdb->get_col( "DESC " . $table_name, 0 ) as $column_name ) { var_dump( $column_name ); } 

如果你使用php,请使用这个要点

它可以得到select字段完整的信息,没有结果,所有的自定义字段,如:

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

该查询获取数据库中所有列的列表,而不必指定表名。 它返回只有列名称的列表:

 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = 'db_name' 

但是,当我在phpmyadmin中运行这个查询时,它显示了一系列的错误。 尽pipe如此,它的工作。 所以谨慎使用它。

这个问题是旧的,但我到这里寻找一种方式来以dynamic的方式(不一定只是一个表的字段)查找给定的查询字段名称。 而且,由于人们不断将这个问题作为其他相关问题的答案,所以我使用Gavin Simpson的提示分享了我发现可以完成的方式:

 //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模块(如果需要的话)(删除数据转储部分)。

希望这可以帮助别人。

我没有专家,但这对我有用。

 $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>";} }