【问题标题】:Get table column names in MySQL?在 MySQL 中获取表列名?
【发布时间】:2010-12-04 08:15:17
【问题描述】:

有没有办法在 MySQL 中使用 PHP 来获取表的列名?

【问题讨论】:

    标签: php sql mysql


    【解决方案1】:

    你可以使用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;
    

    或者在一行中用逗号获取列名:

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

    【讨论】:

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

    以下 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

    【讨论】:

    • 为什么说“几乎”?
    • @Pacerier 一方面,第二个不能用作子查询。
    • @WAF,我认为他的意思完全不同,不是那个。
    • 在我的快速测试中,SHOW COLUMNS 返回一个包含列名、类型等的表,而SELECT COLUMN NAME 只返回列名。
    【解决方案3】:

    我做了一个 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
    ... )
    

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

    附:我没有包含核心类,但您可以使用自己的类.. D.S.

    【讨论】:

    • 大写迷信是怎么回事?
    • 在 Stack Overflow 上回答一个老问题并没有错。
    • 谢谢。对于我这样使用的输出: $columns = $stmt->fetchAll(\PDO::FETCH_ASSOC); return array_column($columns, 'COLUMN_NAME');
    【解决方案4】:

    此解决方案来自命令行 mysql

    mysql>USE information_schema;
    

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

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

    【讨论】:

      【解决方案5】:

      如果你愿意,还有这个:

      mysql_query('SHOW COLUMNS FROM tableName'); 
      

      【讨论】:

        【解决方案6】:

        有趣的是,您可以使用
        EXPLAIN table_name,它是DESCRIBE table_nameSHOW COLUMNS FROM table_name 的同义词 虽然EXPLAIN 更常用于获取有关查询执行计划的信息。

        【讨论】:

          【解决方案7】:

          这个怎么样:

          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;
          

          【讨论】:

            【解决方案8】:

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

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

            【讨论】:

              【解决方案9】:

              查看:

              mysql_query('DESCRIBE '.$table);
              

              【讨论】:

                【解决方案10】:

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

                【解决方案11】:

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

                此功能已弃用。它是 最好使用mysql_query() 改为发出 SQL SHOW COLUMNS FROM table [LIKE 'name'] 语句。

                【讨论】:

                • 如果函数不向服务器发出 SQL 查询,它是如何工作的?为什么会被弃用?
                【解决方案12】:

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

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

                【讨论】:

                  【解决方案13】:

                  在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

                  【讨论】:

                    【解决方案14】:

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

                    DESC TableName
                    

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

                    SHOW COLUMNS FROM TableName
                    

                    【讨论】:

                      【解决方案15】:
                      $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);
                      }
                      

                      【讨论】:

                      • 为了对未来的用户更有帮助,您能否为您的回答提供一些上下文,而不仅仅是代码转储。
                      【解决方案16】:

                      这对我有用..

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

                      【讨论】:

                        【解决方案17】:

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

                        <?php
                        $db = 'Database'; //Database name
                        $host = 'Database_host'; //Hostname or Server ip
                        $user = 'USER'; //Database user
                        $pass = 'Password'; //Database user password
                        $con = mysql_connect($host, $user, $pass);
                        if ($con) {
                            $link = mysql_select_db($db) or die("no database") . mysql_error();
                            $count = 0;
                            if ($link) {
                                $sql = "
                                    SELECT column_name
                                    FROM   information_schema.columns
                                    WHERE  table_schema = '$db'
                                           AND table_name = 'table_name'"; // Change the table_name your own table name
                                $result = mysql_query($sql, $con);
                                if (mysql_query($sql, $con)) {
                                    echo $sql . "<br> <br>";
                                    while ($row = mysql_fetch_row($result)) {
                                        echo "COLUMN " . ++$count . ": {$row[0]}<br>";
                                        $table_name = $row[0];
                                    }
                                    echo "<br>Total No. of COLUMNS: " . $count;
                                } else {
                                    echo "Error in query.";
                                }
                            } else {
                                echo "Database not found.";
                            }
                        } else {
                            echo "Connection Failed.";
                        }
                        ?>
                        

                        享受吧!

                        【讨论】:

                        • 请在此处发布实际答案,仅将您的要点用作备份/参考
                        【解决方案18】:

                        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

                        【讨论】:

                          【解决方案19】:

                          如果使用 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);
                          

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

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

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

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 2021-06-05
                            • 1970-01-01
                            • 2019-02-16
                            • 2013-10-25
                            • 2011-04-17
                            • 1970-01-01
                            • 2016-11-27
                            • 2013-03-10
                            相关资源
                            最近更新 更多