我想把所有mysql表的col名称都放到php中的数组中?
对此有疑问吗?
答案 0 :(得分:456)
最好的方法是使用INFORMATION_SCHEMA元数据虚拟数据库。特别是INFORMATION_SCHEMA.COLUMNS表......
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename'
AND `TABLE_NAME`='yourtablename';
它非常强大,可以为您提供大量信息而无需解析文本(例如列类型,列是否可为空,最大列大小,字符集等)...
哦,这是标准的SQL(而SHOW ...
是MySQL特定的扩展名)...
有关SHOW...
与使用INFORMATION_SCHEMA
表之间区别的更多信息,请查看MySQL Documentation on INFORMATION_SCHEMA
in general ...
答案 1 :(得分:179)
您可以对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 Refrence.
答案 2 :(得分:39)
似乎有两种方式:
DESCRIBE `tablename`
或
SHOW COLUMNS FROM `tablename`
此处DESCRIBE
更多信息:http://dev.mysql.com/doc/refman/5.0/en/describe.html
答案 3 :(得分:17)
我过去做过这个。
SELECT column_name
FROM information_schema.columns
WHERE table_name='insert table name here';
答案 4 :(得分:13)
编辑:今天我学到了更好的方法。请参阅ircmaxell的回答。
解析SHOW COLUMNS FROM table;
这里有更多关于它的内容:http://dev.mysql.com/doc/refman/5.0/en/show-columns.html
答案 5 :(得分:5)
使用mysql_fetch_field()
查看所有列数据。请参阅manual。
$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起已弃用,将来将被删除。“
答案 6 :(得分:5)
不推荐使用旧的PHP函数“mysql_list_fields()”。因此,今天获取字段名称的最佳方法是查询“SHOW COLUMNS FROM table_name [LIKE'name']”。所以,这是一个小例子:
$fields = array();
$res=mysql_query("SHOW COLUMNS FROM mytable");
while ($x = mysql_fetch_assoc($res)){
$fields[] = $x['Field'];
}
foreach ($fields as $f) { echo "<br>Field name: ".$f; }
答案 7 :(得分:3)
function get_col_names(){
$sql = "SHOW COLUMNS FROM tableName";
$result = mysql_query($sql);
while($record = mysql_fetch_array($result)){
$fields[] = $record['0'];
}
foreach ($fields as $value){
echo 'column name is : '.$value.'-';
}
}
return get_col_names();
答案 8 :(得分:3)
如果要使用某些字段检查所有表结构,请使用此代码。在此查询中,我选择column_name,column_type和table_name以获取更多详细信息。我使用column_type的顺序,所以我可以很容易地看到它。
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' order by DATA_TYPE;
如果您只想检查双重类型,那么您可以轻松完成
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME,DATA_TYPE
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' AND DATA_TYPE like '%bigint%' order by DATA_TYPE;
如果你想检查哪个字段允许空类型等,那么你可以使用这个
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME,IS_NULLABLE,DATA_TYPE
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' and DATA_TYPE like '%bigint%' and IS_NULLABLE ='NO' order by COLUMN_TYPE;
你想查看更多,然后thik链接也可以帮助你。
答案 9 :(得分:2)
试一试我个人使用它:
SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_name'
答案 10 :(得分:2)
不确定这是否是您所寻找的,但这对我有用:
$query = query("DESC YourTable");
$col_names = array_column($query, 'Field');
它将表或数组中的列名/变量名的简单数组作为字符串返回,这是我动态构建MySQL查询所需的。我很沮丧的是,我根本不知道如何在PHP中很好地索引数组,所以我不知道如何处理DESC或SHOW的结果。希望我的回答对像我这样的初学者有帮助!
检查结果:print_r($col_names);
答案 11 :(得分:2)
SHOW COLUMNS 使用临时磁盘表。
因此在某些情况下可以认为它很慢。至少,它可以提升你的 created_tmp_disk_tables 值。想象一下每个连接或每个页面请求有一个临时磁盘表。
SHOW COLUMNS 并不是很慢,可能是因为它使用文件系统缓存。 Phpmyadmin表示持续约0.5毫秒。与500ml-1000ms的wordpress页面相比,这没什么。但是,有时候它很重要。有一个磁盘系统参与,你永远不知道当服务器忙,缓存已满,硬盘停滞等等时会发生什么。
通过 SELECT * FROM ... LIMIT 1 检索列名约为0.1毫秒,它也可以使用查询缓存。
所以这是我的小优化代码,用于从表中获取列名,如果可能的话,不使用显示列:
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;
}
注意:
答案 12 :(得分:1)
如果你使用php,请使用 gist 。
它可以获得没有结果的选择字段完整信息,以及所有自定义字段,例如:
SELECT a.name aname, b.name bname, b.*
FROM table1 a LEFT JOIN table2 b
ON a.id = b.pid;
如果上面的sql没有返回数据,也会得到字段名 aname,bname,b的其他字段名
只有两行:
$query_info = mysqli_query($link, $data_source);
$fetch_fields_result = $query_info->fetch_fields();
答案 13 :(得分:1)
IN WORDPRESS:
global $wpdb; $table_name=$wpdb->prefix.'posts';
foreach ( $wpdb->get_col( "DESC " . $table_name, 0 ) as $column_name ) {
var_dump( $column_name );
}
答案 14 :(得分:1)
这个问题很老,但是我找到了一种方法,以动态的方式查找给定查询的字段名称(不一定只是表格的字段)。而且由于人们一直指出这是其他相关问题中给定任务的答案,我正在分享我发现它可以完成的方式,使用Gavin Simpson的提示:
//Function to generate a HTML table from a SQL query
function myTable($obConn,$sql)
{
$rsResult = mysqli_query($obConn, $sql) or die(mysqli_error($obConn));
if(mysqli_num_rows($rsResult)>0)
{
//We start with header. >>>Here we retrieve the field names<<<
echo "<table width=\"100%\" border=\"0\" cellspacing=\"2\" cellpadding=\"0\"><tr align=\"center\" bgcolor=\"#CCCCCC\">";
$i = 0;
while ($i < mysqli_num_fields($rsResult)){
$field = mysqli_fetch_field_direct($rsResult, $i);
$fieldName=$field->name;
echo "<td><strong>$fieldName</strong></td>";
$i = $i + 1;
}
echo "</tr>";
//>>>Field names retrieved<<<
//We dump info
$bolWhite=true;
while ($row = mysqli_fetch_assoc($rsResult)) {
echo $bolWhite ? "<tr bgcolor=\"#CCCCCC\">" : "<tr bgcolor=\"#FFF\">";
$bolWhite=!$bolWhite;
foreach($row as $data) {
echo "<td>$data</td>";
}
echo "</tr>";
}
echo "</table>";
}
}
可以很容易地修改它以将字段名称插入数组中。
使用简单的:$sql="SELECT * FROM myTable LIMIT 1"
可以为您提供任何表的字段,无需使用SHOW COLUMNS
或任何额外的php模块(如果需要)(删除数据转储部分)。
希望这有助于其他人。
答案 15 :(得分:1)
此查询提取数据库中所有列的列表,而不必指定表名。它返回仅列名列表:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'db_name'
但是,当我在phpmyadmin中运行此查询时,它显示了一系列错误。尽管如此,它还是有效的。所以要谨慎使用它。
答案 16 :(得分:1)
所有答案中最简单的解决方案:
.f2 {
background-color: green;
width: 100px;
height: 100px;
}
.f2:hover {
background-color: red;
border: 4px solid red;
}
或
DESC `table name`
或
DESCRIBE `table name`
答案 17 :(得分:0)
我没有专家,但这对我有用..
$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>";}
}
答案 18 :(得分: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'
如果需要所有数据类型
答案 19 :(得分:0)
我已经在SQL Server中尝试了该查询,并且对我有用:
SELECT name FROM sys.columns WHERE OBJECT_ID = OBJECT_ID('table_name')
答案 20 :(得分:0)
调用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;
}