我想让所有的mysql表的col名称在php数组?
对此有疑问吗?
我想让所有的mysql表的col名称在php数组?
对此有疑问吗?
当前回答
调用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'
如果需要所有数据类型
使用mysql_fetch_field()查看所有列数据。参见手册。
$query = 'select * from myfield';
$result = mysql_query($query);
$i = 0;
while ($i < mysql_num_fields($result))
{
$fld = mysql_fetch_field($result, $i);
$myarray[]=$fld->name;
$i = $i + 1;
}
“警告 这个扩展在PHP 5.5.0已经弃用了,将来也会被移除。”
我在SQL Server中尝试过这个查询,这对我有用:
SELECT name FROM sys.columns WHERE OBJECT_ID = OBJECT_ID('table_name')
编辑:今天我学到了更好的方法。请看ircmaxell的回答。
解析SHOW COLUMNS FROM表的输出;
更多信息请点击:http://dev.mysql.com/doc/refman/5.0/en/show-columns.html
最好的方法是使用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的一般内容…