Answers:
最好的方法是使用INFORMATION_SCHEMA元数据虚拟数据库。具体来说是INFORMATION_SCHEMA.COLUMNS表...
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename'
AND `TABLE_NAME`='yourtablename';
它非常强大,可以为您提供大量信息,而无需解析文本(例如列类型,列是否可为空,最大列大小,字符集等)...
哦,这是标准的SQL(这SHOW ...
是MySQL的特定扩展名)...
有关之间区别的详细信息SHOW...
,并使用INFORMATION_SCHEMA
表,检查了MySQL的文档上INFORMATION_SCHEMA
一般 ...
SET @@SESSION.sql_mode = 'ANSI_QUOTES';
事先准备,但我真的不喜欢。对于标识符定界,我没有任何问题。实际上,我比双引号更喜欢它们(双引号使查询对我来说是错误的)...对于每个人自己……
您可以对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。
DESC TableName;
;-)
似乎有两种方法:
DESCRIBE `tablename`
要么
SHOW COLUMNS FROM `tablename`
DESCRIBE
此处的更多信息:http : //dev.mysql.com/doc/refman/5.0/en/describe.html
DESCRIBE
只是的快捷方式SHOW COLUMNS FROM
。
DESC
更简捷DESCRIBE
!
编辑:今天我学会了更好的方法。请参阅ircmaxell的答案。
解析输出 SHOW COLUMNS FROM table;
这里是关于它的更多信息:http : //dev.mysql.com/doc/refman/5.0/en/show-columns.html
使用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起已弃用,以后将删除。”
mysqli_num_fields()
和mysqli_fetch_field_direct()
更新的方法
不推荐使用旧的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; }
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();
当您要检查所有表结构的某些字段时,请使用此代码。在此查询中,我选择column_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;
如果您只想检查双类型字段,则可以轻松完成
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;
如果您想检查哪个字段允许空类型等,那么您可以使用此
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/zh-CN/columns-table.html
mysql 5.1(非5.5)中的SHOW COLUMNS使用临时磁盘表。
因此在某些情况下可以认为它很慢。至少,它可以提高您的created_tmp_disk_tables值。想象一下,每个连接或每个页面请求一个临时磁盘表。
SHOW COLUMNS并不是真的那么慢,可能是因为它使用了文件系统缓存。Phpmyadmin表示持续约0.5毫秒。与500ms-1000ms投放wordpress页面相比,这算什么。但是,有时仍然很重要。涉及磁盘系统,您永远不知道服务器繁忙,缓存已满,硬盘停止等情况时会发生什么。
通过SELECT * FROM ... LIMIT 1检索列名的时间约为0.1ms,它也可以使用查询缓存。
因此,这是我的一些优化代码,用于从表中获取列名,如果可能的话,不使用show列:
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;
}
笔记:
我亲自使用它尝试一下:
SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_name'
这个问题很老,但是我到这里来的是寻找一种以动态方式找到给定查询的字段名称的方法(不一定只是表的字段)。并且由于人们一直将其作为其他相关问题中给定任务的答案,因此,我将使用加文·辛普森(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模块(如果需要)(删除数据转储部分)。
希望这可以帮助其他人。
该查询获取数据库中所有列的列表,而无需指定表名。它返回仅列名称的列表:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'db_name'
但是,当我在phpmyadmin中运行此查询时,它显示了一系列错误。尽管如此,它仍然有效。因此,请谨慎使用。
我没有专家,但这对我有用。
$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>";}
}
我已经在SQL Server中尝试了此查询,这对我有用:
SELECT name FROM sys.columns WHERE OBJECT_ID = OBJECT_ID('table_name')