MySQL查询获取列名?

Har*_*ldo 265 php mysql

我想将所有mysql表的col名称放入php中的数组中?

对此有疑问吗?

irc*_*ell 483

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

SELECT `COLUMN_NAME` 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA`='yourdatabasename' 
    AND `TABLE_NAME`='yourtablename';
Run Code Online (Sandbox Code Playgroud)

它非常强大,可以为您提供大量信息而无需解析文本(例如列类型,列是否可为空,最大列大小,字符集等)...

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

有关表之间的差异SHOW...和使用INFORMATION_SCHEMA表的更多信息,请查看一般的MySQL 文档INFORMATION_SCHEMA ...

  • 如果您不使用那些愚蠢的特定于mysql的反引号来引用表名,那么它只是标准的SQL.我恨他们,他们让我的代码看起来不对劲. (26认同)
  • @MarkR我知道不是.这就是为什么我说*当我写答案时,我实际上并没有包含它们*.我添加它们以利用语法高亮... (18认同)
  • @MarkR我在撰写答案时实际上并没有包含它们.但那时它看起来就像一堵黑色的写作墙.所以我添加了反向标记以利用语法高亮.是的,我可以"SET @@ SESSION.sql_mode ='ANSI_QUOTES';`之前也可以,但我真的不喜欢这样.对于标识符分隔的后退,我没有任何问题.事实上,我比双引号更喜欢它们(双引号使我的查询感觉不对)...给每个人自己... (15认同)
  • 请注意,使用InnodDB表从information_schema中选择可能会非常痛苦.在一些服务器超过一分钟 (4认同)
  • 在上面的例子中根本不需要引用表名. (2认同)
  • @Combesy如果该查询返回列,要么它们存在,要么某些东西**真的**与您的设置不同。我“强烈”建议弄清楚为什么要这样做,而不仅仅是使用其他语法。 (2认同)

bco*_*sca 191

您可以对MYSQL使用以下查询:

SHOW columns FROM your-table;
Run Code Online (Sandbox Code Playgroud)

下面的示例代码显示了如何在php中实现上述语法以列出列的名称:

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

有关SHOW COLUMNS FROM TABLE访问输出的详细信息:MySQL Refrence.

  • 或者......`DESC TableName;`;-) (5认同)

Sur*_*ams 41

似乎有两种方式:

DESCRIBE `tablename`
Run Code Online (Sandbox Code Playgroud)

要么

SHOW COLUMNS FROM `tablename`
Run Code Online (Sandbox Code Playgroud)

更多信息请DESCRIBE访问:http://dev.mysql.com/doc/refman/5.0/en/describe.html

  • 而且```DESC```甚至比```DESCRIBE```更短! (6认同)
  • 啊,"DESCRIBE"只是"SHOW COLUMNS FROM"的捷径. (4认同)

小智 20

我过去做过这个.

SELECT column_name
FROM information_schema.columns
WHERE table_name='insert table name here'; 
Run Code Online (Sandbox Code Playgroud)


The*_*per 14

编辑:今天我学到了更好的方法.请参阅ircmaxell的回答.


解析输出 SHOW COLUMNS FROM table;

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


Gav*_*son 7

使用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;
}
Run Code Online (Sandbox Code Playgroud)

"警告此扩展程序自PHP 5.5.0起已弃用,将来将被删除."

  • mysqli_num_fields()和mysqli_fetch_field_direct()是更新的方法 (2认同)

sam*_*nge 7

这会生成一个带有逗号分隔符的列名字符串:

    SELECT CONCAT('(',GROUP_CONCAT(`COLUMN_NAME`),')') 
    FROM `INFORMATION_SCHEMA`.`COLUMNS` 
    WHERE `TABLE_SCHEMA`='database_name' 
    AND `TABLE_NAME`='table_name';
Run Code Online (Sandbox Code Playgroud)


小智 6

不推荐使用旧的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; }
Run Code Online (Sandbox Code Playgroud)


Sha*_*lam 5

当你想用一些文件检查你的所有表结构时,请使用此代码。在此查询中,我选择 column_name、column_type 和 table_name 以获取更多详细信息。我按 column_type 使用 order,所以我可以很容易地看到它。

SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA`='yourdatabasename' order by DATA_TYPE;
Run Code Online (Sandbox Code Playgroud)

如果您只想检查双类型归档,那么您可以轻松完成

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;
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

如果您想检查哪个字段允许空类型等,那么您可以使用它

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;
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

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

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


Gil*_*gio 5

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

DESC `table name`
Run Code Online (Sandbox Code Playgroud)

或者

DESCRIBE `table name`
Run Code Online (Sandbox Code Playgroud)

或者

SHOW COLUMNS FROM `table name`
Run Code Online (Sandbox Code Playgroud)