在MySQL中获取表列名称?

An *_*yee 268 php mysql sql

有没有办法在mysql中获取表的列名?用php

Gre*_*reg 494

您可以使用DESCRIBE:

DESCRIBE my_table;
Run Code Online (Sandbox Code Playgroud)

或者在较新的版本中,您可以使用INFORMATION_SCHEMA:

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

或者您可以使用SHOW COLUMNS:

SHOW COLUMNS FROM my_table;
Run Code Online (Sandbox Code Playgroud)

  • DESCRIBE实际上是SHOW COLUMNS的快捷方式(http://dev.mysql.com/doc/refman/5.0/en/describe.html) (12认同)
  • 我会投票给Information_Schema版本,因为大多数主要数据库都支持这种语法.如果必须,最好只学习1种方法. (9认同)
  • 用于描述的“DESC”很容易与用于降序的“DESC”混淆。由于缺乏可读性而节省的标称字节数是不值得的。 (4认同)
  • +1我想选择一个列存在的表名我做了`SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA ='db_name'AND COLUMN_NAME ='col_name';` (2认同)
  • 使用`desc my_table;`保存字节:`:-) (2认同)

OMG*_*ies 34

以下SQL语句几乎相同:

SELECT COLUMN_NAME
  FROM INFORMATION_SCHEMA.COLUMNS
 WHERE table_name = 'tbl_name'
  [AND table_schema = 'db_name']
  [AND column_name LIKE 'wild']

SHOW COLUMNS
FROM tbl_name
[FROM db_name]
[LIKE 'wild']
Run Code Online (Sandbox Code Playgroud)

参考:INFORMATION_SCHEMA COLUMNS

  • 在我的快速测试中,`SHOW COLUMNS` 返回一个包含列名、类型等的表,而 `SELECT COLUMN NAME` 只返回列名。 (3认同)
  • @Pacerier一方面,第二个不能作为子查询工作. (2认同)

Phi*_*lip 20

我创建了一个PDO函数,它返回一个简单数组中的所有列名.

public function getColumnNames($table){
    $sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = :table";
    try {
        $core = Core::getInstance();
        $stmt = $core->dbh->prepare($sql);
        $stmt->bindValue(':table', $table, PDO::PARAM_STR);
        $stmt->execute();
        $output = array();
        while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
            $output[] = $row['COLUMN_NAME'];                
        }
        return $output; 
    }

    catch(PDOException $pe) {
        trigger_error('Could not connect to MySQL database. ' . $pe->getMessage() , E_USER_ERROR);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出将是一个数组:

Array (
[0] => id
[1] => name
[2] => email
[3] => shoe_size
[4] => likes
... )
Run Code Online (Sandbox Code Playgroud)

对不起,我喜欢我的功能;)

PS我没有包括Core类,但你可以使用自己的类.. DS


小智 6

这个解决方案来自命令行mysql

mysql>USE information_schema;
Run Code Online (Sandbox Code Playgroud)

在下面的查询中只需将< - DATABASE_NAME - >更改为您的数据库,将< - TABLENAME - >更改为您只需要DESCRIBE语句的字段值的表名

mysql> SELECT COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA = '<--DATABASE_NAME-->' AND   TABLE_NAME='<--TABLENAME-->';
Run Code Online (Sandbox Code Playgroud)


Jam*_*win 5

如果您愿意,还有这个:

mysql_query('SHOW COLUMNS FROM tableName'); 
Run Code Online (Sandbox Code Playgroud)


Ant*_*nyS 5

值得注意的是,您可以使用
EXPLAIN table_namewhich 与DESCRIBE table_nameand同义,SHOW COLUMNS FROM table_name 尽管EXPLAIN更常用于获取有关查询执行计划的信息。


duh*_*ime 5

我需要列名作为平面数组,而其他答案返回关联数组,所以我使用:

$con = mysqli_connect('localhost',$db_user,$db_pw,$db_name);
$table = 'people';

/**
* Get the column names for a mysql table
**/

function get_column_names($con, $table) {
  $sql = 'DESCRIBE '.$table;
  $result = mysqli_query($con, $sql);

  $rows = array();
  while($row = mysqli_fetch_assoc($result)) {
    $rows[] = $row['Field'];
  }

  return $rows;
}

$col_names = function get_column_names($con, $table);
Run Code Online (Sandbox Code Playgroud)

$col_names 现在等于:

(
    [0] => name
    [1] => parent
    [2] => number
    [3] => chart_id
    [4] => type
    [5] => id
)
Run Code Online (Sandbox Code Playgroud)