在MySQL中获取表列名称?
有没有办法在mysql中获取表的列名? 使用PHP
您可以使用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;
以下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列
我做了一个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 ... )
对不起,但我喜欢我的function;)
PS我没有包括类核心,但你可以使用自己的类.. DS
这个怎么样:
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;
这个解决scheme是从命令行mysql
mysql>USE information_schema;
在下面的查询中,只需将< – DATABASE_NAME – >更改为您的数据库,将< – TABLENAME – >更改为您的表名,您只需要DESCRIBE语句的字段值
mysql> SELECT COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA = '<--DATABASE_NAME-->' AND TABLE_NAME='<--TABLENAME-->';
你可能也想看看mysql_fetch_array()
,如下所示:
$rs = mysql_query($sql); while ($row = mysql_fetch_array($rs)) { //$row[0] = 'First Field'; //$row['first_field'] = 'First Field'; }
注意可以使用也很有趣
EXPLAIN table_name
与DESCRIBLE table_name
和SHOW COLUMS FROM table_name
同义,尽pipeEXPLAIN更常用于获取有关查询执行计划的信息。
调查:
mysql_query('DESCRIBE '.$table);
MySQL函数describe表应该让你到你想去的地方(把你的表名放在“table”中)。 你将不得不parsing一些输出,但这很容易。 我记得,如果你执行这个查询,通常会给你一个键值对的PHP查询结果访问函数将有列名作为键。 但是自从我使用PHP以来已经有一段时间了,所以不要拘泥于此。 🙂
还有,如果你喜欢:
mysql_query('SHOW COLUMNS FROM tableName');
mysql_list_fields
函数可能会让你感兴趣; 但是,正如手册所述:
此function已被弃用。 最好使用
mysql_query()
来发出SQLSHOW COLUMNS FROM table [LIKE 'name']
语句。
这对我工作..
$sql = "desc MyTableName"; $result = @mysql_query($sql); while($row = @mysql_fetch_array($result)){ echo $row[0]."<br>"; }
您可以使用以下简单的命令获取整个表结构。
DESC TableName
或者你可以使用下面的查询。
SHOW COLUMNS FROM TableName
在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
$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); }
我需要列名作为平面数组,而其他答案返回关联数组,所以我使用:
$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 )