mysql查询得到列名?

ffx8fchx  于 2021-06-18  发布在  Mysql
关注(0)|答案(21)|浏览(493)

我想在php中将mysql表的所有列名都放到一个数组中?
对此有疑问吗?

2admgd59

2admgd591#

编辑:今天我学到了更好的方法。请看马克塞尔的答案。
解析的输出 SHOW COLUMNS FROM table; 更多信息请参见:http://dev.mysql.com/doc/refman/5.0/en/show-columns.html

omjgkv6w

omjgkv6w2#

使用 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开始,此扩展已被弃用,以后将被删除

q5lcpyga

q5lcpyga3#

如果只需要字段名和类型(可能是为了方便复制粘贴到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'

如果需要所有数据类型

vlf7wbxs

vlf7wbxs4#

我在sql server中尝试过此查询,但效果很好:

SELECT name FROM sys.columns WHERE OBJECT_ID = OBJECT_ID('table_name')
v9tzhpje

v9tzhpje5#

您可以对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 reference。

g6ll5ycj

g6ll5ycj6#

不确定这是不是你要找的,但这对我很有用:

$query = query("DESC YourTable");  
$col_names = array_column($query, 'Field');

它以字符串的形式返回表或数组中列名/变量名的简单数组,这是动态构建mysql查询所需的。我的挫败感是我根本不知道如何在php中很好地索引数组,所以我不知道如何处理desc或show的结果。希望我的回答对像我这样的初学者有帮助!
检查结果: print_r($col_names);

7gyucuyw

7gyucuyw7#

上帝的召唤 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;
}
rseugnpd

rseugnpd8#

此查询获取数据库中所有列的列表,而不必指定表名。它只返回列名列表:

SELECT COLUMN_NAME
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE table_schema = 'db_name'

但是,当我在phpmyadmin中运行这个查询时,它显示了一系列错误。尽管如此,它还是奏效了。所以要小心使用。

np8igboo

np8igboo9#

当您想检查您的所有表结构与一些文件,然后使用此代码。在这个查询中,我选择column\u name、column\u type和table\u name来获取更多的细节。我使用按列类型排序,这样我就可以很容易地看到它。

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;


你想查更多的话这个链接也帮你。
https://dev.mysql.com/doc/refman/5.7/en/columns-table.html

u1ehiz5o

u1ehiz5o10#

在wordpress中:

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

9nvpjoqh11#

如果您使用php,请使用以下要点。
它可以获取选定字段的完整信息而不产生任何结果,以及所有自定义字段,例如:

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();
hrirmatl

hrirmatl12#

试试这个我自己用的:

SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_name'
jjjwad0x

jjjwad0x13#

这个问题由来已久,但我在这里寻找一种方法,以动态方式(不一定只查找表的字段)查找给定查询的字段名。由于人们在其他相关问题中不断将此作为给定任务的答案,我将分享我发现的方法,使用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模块,如果需要的话(删除数据转储部分)。
希望这能帮助其他人。

mwecs4sa

mwecs4sa14#

最好的方法是使用信息模式元数据虚拟数据库。具体来说,就是information\u schema.columns表。。。

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

它非常强大,无需解析文本即可提供大量信息(如列类型、列是否可为空、最大列大小、字符集等)。。。
哦,这是标准的sql(然而 SHOW ... 是mysql特定的扩展)。。。
有关 SHOW... 使用 INFORMATION_SCHEMA 表,请查看上的mysql文档 INFORMATION_SCHEMA 一般来说。。。

yzuktlbb

yzuktlbb15#

我不是Maven,但这对我有用。。

$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>";}    

}

相关问题