Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL查询以获取列名?_Php_Mysql - Fatal编程技术网

Php MySQL查询以获取列名?

Php MySQL查询以获取列名?,php,mysql,Php,Mysql,我想在php中将mysql表的所有列名称都放入一个数组中 对此有疑问吗 您可以对MYSQL使用以下查询: SHOW `columns` FROM `your-table`; 下面的示例代码显示了如何在php中实现上述语法以列出列的名称: $sql = "SHOW COLUMNS FROM your-table"; $result = mysqli_query($conn,$sql); while($row = mysqli_fetch_array($result)){

我想在php中将mysql表的所有列名称都放入一个数组中


对此有疑问吗

您可以对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>";
}
$sql=“显示表中的列”;
$result=mysqli\u查询($conn,$sql);
while($row=mysqli\u fetch\u数组($result)){
echo$row['Field']。“
”; }

有关表中显示列的输出的详细信息,请访问:

编辑:今天我学到了更好的方法。请看马克塞尔的答案


解析表中的
SHOW列的输出


这里有更多信息:

似乎有两种方法:

DESCRIBE `tablename`


有关
的详细信息,请在此处进行描述:

最好的方法是使用元数据虚拟数据库。特别是桌子

它非常强大,可以为您提供大量信息,而无需解析文本(例如列类型、列是否可为空、最大列大小、字符集等)

哦,它是标准的SQL(而
SHOW…
是一个特定于MySQL的扩展)


有关
SHOW…
和使用
information\u SCHEMA
表之间的区别的更多信息,请查看MySQL…

我以前做过这项工作

SELECT column_name
FROM information_schema.columns
WHERE table_name='insert table name here'; 

使用
mysql\u fetch\u field()
查看所有列数据。看

$query='select*from myfield';
$result=mysql\u query($query);
$i=0;
而($iname;
$i=$i+1;
}
“警告 从PHP 5.5.0开始,此扩展已被弃用,并将在将来删除。”

旧的PHP函数“mysql\u list\u fields()”已被弃用。因此,今天获取字段名称的最佳方法是查询“SHOW COLUMNS FROM table_name[如'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; }
$fields=array();
$res=mysql_查询(“显示mytable中的列”);
而($x=mysql\u fetch\u assoc($res)){
$fields[]=$x['Field'];
}
foreach($f形式的字段){echo“
字段名:“.$f;}
mysql 5.1(而不是5.5)中的SHOW COLUMNS使用临时磁盘表

因此,在某些情况下,它可以被认为是缓慢的。至少,它可以提升您创建的tmp磁盘表的价值。假设每个连接或每个页面请求有一个临时磁盘表


SHOW COLUMNS并不是很慢,可能是因为它使用了文件系统缓存。Phpmyadmin说~0.5ms一致。与500毫秒到1000毫秒的wordpress页面服务相比,这算不了什么。不过,有时这很重要。这涉及到磁盘系统,当服务器繁忙、缓存已满、hdd暂停等情况时,您永远不知道会发生什么

通过选择*从中检索列名。。。限制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_rowsdb_row_ar应替换为特定的数据库设置

    • 在WORDPRESS中:

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

      试试这个,我个人用它:

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

      如果您使用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();
      

      不确定这是否是你想要的,但这对我来说很有用:

      $query = query("DESC YourTable");  
      $col_names = array_column($query, 'Field');
      
      它以字符串的形式返回表或数组中列名/变量名的简单数组,这是动态构建MySQL查询所需的。我的挫折是,我根本不知道如何在PHP中很好地索引数组,所以我不确定如何处理DESC或SHOW的结果。希望我的答案对像我这样的初学者有帮助


      要检查结果:
      print\r($col\u name)

      这个问题很老了,但我在这里寻找一种方法,以动态方式查找给定查询及其字段名(不一定只查找表的字段)。由于人们在其他相关问题中不断将此作为给定任务的答案,我将使用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查询生成HTML表的函数
      函数myTable($obConn$sql)
      {
      $rsResult=mysqli_query($obConn,$sql)或die(mysqli_error($obConn));
      如果(mysqli_num_行($rsResult)>0)
      {
      //我们从标题开始。>>>这里我们检索字段名称;
      echo“$fieldName”;
      $i=$i+1;
      }
      回声“;
      
      //>>>检索到的字段名我不是专家,但这对我很有用

      $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>";}    
      
      }
      
      $sql=“desc MyTable”;
      $result=@mysql\u查询($sql);
      而($row=@mysql\u fetch\u array($result)){
      echo$row[0]。“
      ”;//返回数组的第一列。在本例中为字段 //下面的代码将返回一个完整的数组->字段、类型、Null、Key、Default、Extra
      //对于($c=0;$c),此查询获取数据库中所有列的列表,而不必指定表名。它只返回列名列表:

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

      但是,当我在phpmyadmin中运行此查询时,它显示了一系列错误。尽管如此,它仍然有效。因此,请谨慎使用它。

      当您要检查具有某些字段的所有表结构时,请使用此代码。在该查询中,我选择列名称、列类型和表名称以了解更多详细信息。我使用按列类型排序,以便可以轻松查看很好

      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
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE table_schema = 'db_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;
      
      DESC `table name`
      
      DESCRIBE `table name`
      
      SHOW COLUMNS FROM `table name`
      
      SELECT COLUMN_NAME, DATA_TYPE
      FROM INFORMATION_SCHEMA.COLUMNS
      WHERE TABLE_SCHEMA='databasenamegoeshere'
      AND DATA_TYPE='decimal' and TABLE_NAME = 'tablenamegoeshere'
      
      DATA_TYPE='decimal'
      
      SELECT name FROM sys.columns WHERE OBJECT_ID = OBJECT_ID('table_name')
      
      // 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';
      
      // 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;
      }