php pdo:获取表的列名

lau*_*kok 46 php pdo fetch

如何使用PDO从表中获取所有列名?

id         name        age
1          Alan        35      
2          Alex        52
3          Amy         15
Run Code Online (Sandbox Code Playgroud)

我想要的信息是,

id         name        age
Run Code Online (Sandbox Code Playgroud)

编辑:

这是我的尝试,

$db = $connection->get_connection();
$select = $db->query('SELECT * FROM contacts');

$total_column = $select->columnCount();
var_dump($total_column);

for ($counter = 0; $counter < $total_column; $counter ++) {
    $meta = $select->getColumnMeta($counter);
    $column[] = $meta['name'];
}
print_r($column);
Run Code Online (Sandbox Code Playgroud)

然后我明白了,

Array
(
    [0] => id
    [1] => name
    [2] => age
    ...

)
Run Code Online (Sandbox Code Playgroud)

Jes*_*sen 90

我通过以下方式解决问题(仅限MySQL)

$q = $dbh->prepare("DESCRIBE tablename");
$q->execute();
$table_fields = $q->fetchAll(PDO::FETCH_COLUMN);
Run Code Online (Sandbox Code Playgroud)

  • 这仅受MySQL支持. (16认同)
  • 为什么不``$ q = $ dbh-> query("DESCRIBE tablename"); $ table_fields = $ q-> fetchAll(PDO :: FETCH_COLUMN);`? (10认同)
  • 读者,对于通用解决方案,请参阅@Will回答. (3认同)

小智 31

这适用于MySQL,Postgres,以及可能使用该LIMIT子句的任何其他PDO驱动程序.

LIMIT 0添加注意事项以提高性能:

$rs = $db->query('SELECT * FROM my_table LIMIT 0');
for ($i = 0; $i < $rs->columnCount(); $i++) {
    $col = $rs->getColumnMeta($i);
    $columns[] = $col['name'];
}
print_r($columns);
Run Code Online (Sandbox Code Playgroud)

  • @DaviddCeFreitas,对不起方法[getColumnMeta](http://www.php.net/manual/en/pdostatement.getcolumnmeta.php)已有6年以上的"实验"警报......唯一的方法是使用非空表.您可以使用类似`SELECT*FROM my_table WHERE id = 0`的内容,并使用无数据行填充所有表. (3认同)

rag*_*nar 21

我的2美分:

$result = $db->query('select * from table limit 1');
$fields = array_keys($result->fetch(PDO::FETCH_ASSOC));
Run Code Online (Sandbox Code Playgroud)

并且您将在var $字段中将列名称作为数组.

  • 当表为空时,这不起作用. (7认同)
  • 它也不适用于选择2个`id`列的连接. (2认同)

Pra*_*pta 12

$ sql ="select table_schema.columns中的column_name,其中table_name ='myTable'";

PHP函数学分:http://www.sitepoint.com/forums/php-application-design-147/get-pdo-column-name-easy-way-559336.html

    function getColumnNames(){ 

    $sql = "select column_name from information_schema.columns where table_name = 'myTable'";
    #$sql = 'SHOW COLUMNS FROM ' . $this->table; 

    $stmt = $this->connection->prepare($sql); 

    try {     
        if($stmt->execute()){ 
            $raw_column_data = $stmt->fetchAll(PDO::FETCH_ASSOC); 

            foreach($raw_column_data as $outer_key => $array){ 
                foreach($array as $inner_key => $value){ 
                            if (!(int)$inner_key){ 
                                $this->column_names[] = $value; 
                            } 
                } 
            } 
            } 
            return $this->column_names; 
        } catch (Exception $e){ 
                return $e->getMessage(); //return exception 
        }         
    }  
Run Code Online (Sandbox Code Playgroud)

  • 为'information_schema`而不是DB特定的+1. (4认同)
  • @ Phil,[`information_schema`](http://en.wikipedia.org/wiki/Information_schema)是ANSI标准的一部分.它已在MySQL,PostgreSQL和MSSQL中实现.除非OP使用Oracle或SQLite,否则它应该对他有用(假设这个答案是他想要的). (3认同)