仅获取数组 mysql 中的列名


Get Only column names as in array mysql

我是php和mysql的新手。我想创建一个动态表,该表将包含 mysql 数据库中表中的所有字段。我正在尝试获取数组中的所有列名,但失败了。我正在尝试以下代码:

<?php
    $fields = mysql_query("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'mytablename' ");
    $res = mysql_fetch_array($fields);
    foreach ($res as $field)
    {
        echo '<tr>';
        echo '<td>';
        echo $field;
        echo '</td>';
        echo '<td>';
        echo "<input type='text' class='' name='tags' id='tags' value=''>";
        echo '</td>';
        echo '</tr>';
    }
    ?>

任何协助将不胜感激。

您不需要额外的 SQL 查询来获取字段名称。您可以使用普通的 SELECT 查询,只需从该查询中获取字段名称(和定义)。这样性能更好!

已弃用的 MySQL 解决方案:

MySQL 库已弃用。它可以像在此链接中使用一样,顺便说一句,您应该切换到 mysqli 库,该库在程序化使用时几乎相同(第二个示例)。

htttp://www.php.net/manual/en/function.mysql-field-name.php

OOP MySQLi 解决方案:

$query = "SELECT Name, SurfaceArea from Country ORDER BY Code LIMIT 5";
if ($result = $mysqli->query($query)) {
/* Get field information for all columns */
    while ($finfo = $result->fetch_field()) {
        printf("Name:     %s'n", $finfo->name);
        printf("Table:    %s'n", $finfo->table);
        printf("max. Len: %d'n", $finfo->max_length);
        printf("Flags:    %d'n", $finfo->flags);
        printf("Type:     %d'n'n", $finfo->type);
    }
    $result->close();
}    

程序化 MySQLi 解决方案:

$query = "SELECT Name, SurfaceArea from Country ORDER BY Code LIMIT 5";
if ($result = mysqli_query($link, $query)) {
    /* Get field information for all fields */
    while ($finfo = mysqli_fetch_field($result)) {
        printf("Name:     %s'n", $finfo->name);
        printf("Table:    %s'n", $finfo->table);
        printf("max. Len: %d'n", $finfo->max_length);
        printf("Flags:    %d'n", $finfo->flags);
        printf("Type:     %d'n'n", $finfo->type);
    }
    mysqli_free_result($result);
}

http://www.php.net/manual/en/mysqli-result.fetch-field.php

使用这个:

echo $field['COLUMN_NAME'];

而不是$field

这将给出列名称。

执行查询后,查询将返回以下字段:

           TABLE_CATALOG: def
            TABLE_SCHEMA: schema_name
              TABLE_NAME: table_name
             COLUMN_NAME: column_name /*use this column name*/
        ORDINAL_POSITION: 49
          COLUMN_DEFAULT: NULL
             IS_NULLABLE: YES
               DATA_TYPE: varchar
CHARACTER_MAXIMUM_LENGTH: 255
  CHARACTER_OCTET_LENGTH: 765
       NUMERIC_PRECISION: NULL
           NUMERIC_SCALE: NULL
      CHARACTER_SET_NAME: utf8
          COLLATION_NAME: utf8_general_ci
             COLUMN_TYPE: varchar(255)
              COLUMN_KEY: 
                   EXTRA: 
              PRIVILEGES: select,insert,update,references
          COLUMN_COMMENT: 

使用:

<?php
$fields = mysql_query("SHOW columns FROM mytablename");
while($row = mysql_fetch_array($fields))
{
    echo '<tr>';
    echo '<td>';
    echo $row["Field"];
    echo '</td>';
    echo '<td>';
    echo "<input type='text' class='' name='tags' id='tags' value=''>";
    echo '</td>';
    echo '</tr>';
}
?>

请注意,此代码使用 mysqli_* php 库,因为旧的 mysql_* 库已弃用,永远不应使用。

这可能会解决问题

<?php
            $table = 'tableName';
            $query = "SHOW COLUMNS FROM $table";
            if($output = mysqli_query($query)):
                $columns = array();
                while($result = mysqli_fetch_assoc($output)):
                    $columns[] = $result['Field'];
                endwhile;
            endif;
            echo '<pre>';
            print_r($columns);
            echo '</pre>';
    ?>

尝试以下函数:

function mysql_field_array($query) {
    $field = mysql_num_fields($query);
    for ($i = 0; $i < $field; $i++) {
        $names[] = mysql_field_name($query, $i);
    }
    return $names;
}
你可以

PDO做这样的事情:

var_dump(array_keys($dbh->query('SELECT * FROM `mytablename` LIMIT 1')->fetch(PDO::FETCH_ASSOC)));

使用 PDO 库创建具有字段名称的表行:

$db = new PDO('mysql:host=localhost;dbname=databasename','user','password');
echo "<tr>";
$query = $db->prepare("SHOW COLUMNS FROM `table`");
$query->execute();
$fields = array();
while($result = $query->fetch(PDO::FETCH_ASSOC)){
    echo "<td style='font-weight:bold; padding:5px'>$result[Field]</td>";
    $fields[] = $result['Field'];
}
echo "</tr>'n";