在MySQL中获取表列名称?

时间:2009-10-06 16:32:13

标签: php sql mysql

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

19 个答案:

答案 0 :(得分:475)

您可以使用DESCRIBE

DESCRIBE my_table;

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

SELECT COLUMN_NAME
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';

或者您可以使用SHOW COLUMNS

SHOW COLUMNS FROM my_table;

答案 1 :(得分: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']

参考:INFORMATION_SCHEMA COLUMNS

答案 2 :(得分: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);
    }
}

输出将是一个数组:

Array (
[0] => id
[1] => name
[2] => email
[3] => shoe_size
[4] => likes
... )

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

P.S。我没有包含类Core,但你可以使用自己的类.. D.S。

答案 3 :(得分:6)

此解决方案来自命令行mysql

mysql>USE information_schema;

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

的表名
mysql> SELECT COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA = '<--DATABASE_NAME-->' AND   TABLE_NAME='<--TABLENAME-->';

答案 4 :(得分:5)

这个怎么样:

SELECT @cCommand := GROUP_CONCAT( COLUMN_NAME ORDER BY column_name SEPARATOR ',\n')
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';

SET @cCommand = CONCAT( 'SELECT ', @cCommand, ' from my_database.my_table;');
PREPARE xCommand from @cCommand;
EXECUTE xCommand;

答案 5 :(得分:3)

MySQL功能 描述表 应该让你到达你想去的地方(把你的表名放在“表”中)。你必须解析一些输出,但这很容易。我记得,如果你执行那个查询,PHP查询结果访问函数通常会给你一个键值对将列名作为键。但是自从我使用PHP以来已经有一段时间了,所以不要抱我这么做。 :)

答案 6 :(得分:3)

值得注意的是,你可以使用
EXPLAIN table_nameDESCRIBE table_nameSHOW COLUMNS FROM table_name同义 虽然EXPLAIN更常用于获取有关查询执行计划的信息。

答案 7 :(得分:3)

您可能还想查看mysql_fetch_array(),如:

$rs = mysql_query($sql);
while ($row = mysql_fetch_array($rs)) {
//$row[0] = 'First Field';
//$row['first_field'] = 'First Field';
}

答案 8 :(得分:3)

如果你愿意,还有这个:

mysql_query('SHOW COLUMNS FROM tableName'); 

答案 9 :(得分:3)

查看:

mysql_query('DESCRIBE '.$table);

答案 10 :(得分:2)

mysql_list_fields功能可能会让您感兴趣;但是,正如手册所述:

  

不推荐使用此功能。它是   最好使用mysql_query()来   而是发出SQL SHOW COLUMNS FROM table [LIKE 'name']语句。

答案 11 :(得分:2)

$col = $db->query("SHOW COLUMNS FROM category");

while ($fildss = $col->fetch_array())
{             
    $filds[] = '"{'.$fildss['Field'].'}"';
    $values[] = '$rows->'.$fildss['Field'].'';
}

if($type == 'value')
{
    return $values = implode(',', $values);
}
else {
     return $filds = implode(',', $filds);
}

答案 12 :(得分:2)

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

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

$ col_names现在等于:

(
    [0] => name
    [1] => parent
    [2] => number
    [3] => chart_id
    [4] => type
    [5] => id
)

答案 13 :(得分:1)

这对我有用..

$sql = "desc MyTableName";
$result = @mysql_query($sql);
while($row = @mysql_fetch_array($result)){
    echo $row[0]."<br>";
}

答案 14 :(得分:1)

您可以使用以下简单命令获取整个表结构。

DESC TableName

或者您可以使用以下查询。

SHOW COLUMNS FROM TableName

答案 15 :(得分:1)

在mysql中

通过以下关键字或查询来获取列详细信息和表结构

1。DESC table_name

2。DESCRIBE table_name

3。SHOW COLUMNS FROM table_name

4。SHOW create table table_name;

5。EXPLAIN table_name

答案 16 :(得分:1)

我写了一个简单的php脚本来通过PHP获取表列: Show_table_columns.php

享受!

答案 17 :(得分:0)

mysqli fetch_field()对我有用:

if ($result = $mysqli -> query($sql)) {
  // Get field information for all fields
  while ($fieldinfo = $result -> fetch_field()) {
    printf("Name: %s\n", $fieldinfo -> name);
    printf("Table: %s\n", $fieldinfo -> table);
    printf("Max. Len: %d\n", $fieldinfo -> max_length);
  }
  $result -> free_result();
}

来源:https://www.w3schools.com/pHP/func_mysqli_fetch_field.asp

答案 18 :(得分:0)

如果使用assoc加载结果,最简单的方法是:

$sql = "SELECT p.* FROM (SELECT 1) as dummy LEFT JOIN `product_table` p on null";
$q = $this->db->query($sql);
$column_names = array_keys($q->row);

使用此查询加载单个结果,将获得一个数组,其中表列名称为键,而null为值。 例如

Array(
'product_id' => null,
'sku' => null,
'price' => null,
...
)

之后,您可以使用php函数array_keys($ result)轻松获取表列名称