我想让所有的mysql表的col名称在php数组?
对此有疑问吗?
我想让所有的mysql表的col名称在php数组?
对此有疑问吗?
当前回答
编辑:今天我学到了更好的方法。请看ircmaxell的回答。
解析SHOW COLUMNS FROM表的输出;
更多信息请点击:http://dev.mysql.com/doc/refman/5.0/en/show-columns.html
其他回答
使用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已经弃用了,将来也会被移除。”
如果你只需要字段名和类型(可能是为了方便复制粘贴到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:
SHOW `columns` FROM `your-table`;
下面是示例代码,它展示了如何在php中实现上述语法来列出列的名称:
$sql = "SHOW COLUMNS FROM your-table";
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($result)){
echo $row['Field']."<br>";
}
关于SHOW COLUMNS FROM TABLE输出的详细信息请访问:MySQL参考。
我不是专家,但这对我有用。
$sql = "desc MyTable";
$result = @mysql_query($sql);
while($row = @mysql_fetch_array($result)){
echo $row[0]."<br>"; // returns the first column of array. in this case Field
// the below code will return a full array-> Field,Type,Null,Key,Default,Extra
// for ($c=0;$c<sizeof($row);$c++){echo @$row[$c]."<br>";}
}
mysql 5.1(不是5.5)中的SHOW COLUMNS使用了一个临时磁盘表。
http://dev.mysql.com/doc/refman/5.1/en/internal-temporary-tables.html http://dev.mysql.com/doc/refman/5.1/en/show-columns.html
所以在某些情况下,它可以被认为是很慢的。至少,它可以提高created_tmp_disk_tables的值。假设每个连接或每个页面请求都有一个临时磁盘表。
SHOW COLUMNS并不是真的那么慢,可能是因为它使用了文件系统缓存。Phpmyadmin始终表示~0.5ms。这与服务一个wordpress页面的500 -1000毫秒相比根本不算什么。但有时还是很重要的。其中涉及到磁盘系统,你永远不知道当服务器忙、缓存满、硬盘卡住等情况下会发生什么。
通过SELECT * FROM…获取列名LIMIT 1大约0.1ms,它也可以使用查询缓存。
下面是我优化的从表中获取列名的代码,如果可能的话不使用show columns:
function db_columns_ar($table)
{
//returns Array('col1name'=>'col1name','col2name'=>'col2name',...)
if(!$table) return Array();
if(!is_string($table)) return Array();
global $db_columns_ar_cache;
if(!empty($db_columns_ar_cache[$table]))
return $db_columns_ar_cache[$table];
//IMPORTANT show columns creates a temp disk table
$cols=Array();
$row=db_row_ar($q1="SELECT * FROM `$table` LIMIT 1");
if($row)
{
foreach($row as $name=>$val)
$cols[$name]=$name;
}
else
{
$coldata=db_rows($q2="SHOW COLUMNS FROM `$table`");
if($coldata)
foreach($coldata as $row)
$cols[$row->Field]=$row->Field;
}
$db_columns_ar_cache[$table]=$cols;
//debugexit($q1,$q2,$row,$coldata,$cols);
return $cols;
}
注:
只要您的表的第一行不包含兆字节范围的数据,它应该工作正常。 函数名db_rows和db_row_ar应该替换为特定的数据库设置。