我想让所有的mysql表的col名称在php数组?

对此有疑问吗?


当前回答

在WORDPRESS:

global $wpdb;   $table_name=$wpdb->prefix.'posts';
foreach ( $wpdb->get_col( "DESC " . $table_name, 0 ) as $column_name ) {
  var_dump( $column_name );
}

其他回答

最好的方法是使用INFORMATION_SCHEMA元数据虚拟数据库。特别是INFORMATION_SCHEMA。列的表…

SELECT `COLUMN_NAME` 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA`='yourdatabasename' 
    AND `TABLE_NAME`='yourtablename';

它非常强大,可以给你大量的信息,而不需要解析文本(比如列类型,列是否为空,最大列大小,字符集,等等)…

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

有关SHOW…使用INFORMATION_SCHEMA表,查看MySQL文档中关于INFORMATION_SCHEMA的一般内容…

调用DESCRIBE可以很好地获取表的所有列,但如果需要对其进行筛选,则需要使用SHOW columns FROM。

PHP函数获取表的所有信息的例子:

// get table columns (or return false if table not found)
function get_table_columns($db, $table) {
    
    global $pdo;

    if($cols = $pdo->query("DESCRIBE `$db`.`$table`")) {
        if($cols = $cols->fetchAll(PDO::FETCH_ASSOC)) {
            return $cols;
        }
    }
    
    return false;
}

在我的例子中,我必须找到一个表的主键。所以,我用了:

SHOW COLUMNS FROM `table` WHERE `Key`='PRI';

下面是我的PHP函数:

// get table Primary Key
function get_table_pk($db, $table) {

    global $pdo;
            
    $q = "SHOW COLUMNS FROM `$db`.`$table` WHERE `Key` = 'PRI'";
    if($cols = $pdo->query($q)) {
        if($cols = $cols->fetchAll(PDO::FETCH_ASSOC)) {
            return $cols[0];
        }
    }
    
    return false;
}

如果你只需要字段名和类型(可能是为了方便复制粘贴到Excel中):

SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='databasenamegoeshere'
AND DATA_TYPE='decimal' and TABLE_NAME = 'tablenamegoeshere'

删除

DATA_TYPE='decimal'

如果需要所有数据类型

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

DESC `table name`

or

DESCRIBE `table name`

or

SHOW COLUMNS FROM `table name`

编辑:今天我学到了更好的方法。请看ircmaxell的回答。


解析SHOW COLUMNS FROM表的输出;

更多信息请点击:http://dev.mysql.com/doc/refman/5.0/en/show-columns.html