6

我是 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>';
    }
    ?>

任何援助将不胜感激。

4

7 回答 7

5

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

不推荐使用的 MySQL 解决方案:

MySQL 库已弃用。它可以在这个链接中使用,但是你应该切换到 mysqli 库,它在程序上使用时几乎相同(第二个示例)。

http://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

于 2013-09-23T09:21:04.613 回答
2

用这个:

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: 
于 2013-09-23T09:22:36.883 回答
1

利用:

<?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>';
}
?>
于 2013-09-23T09:31:47.910 回答
1

请注意,此代码使用 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>';
    ?>
于 2013-09-23T09:21:46.743 回答
1

尝试以下功能:

function mysql_field_array($query) {

    $field = mysql_num_fields($query);

    for ($i = 0; $i < $field; $i++) {
        $names[] = mysql_field_name($query, $i);
    }
    return $names;
}
于 2016-09-26T10:55:24.620 回答
0

你可以做这样的事情,而不是PDO

var_dump(array_keys($dbh->query('SELECT * FROM `mytablename` LIMIT 1')->fetch(PDO::FETCH_ASSOC)));
于 2013-09-23T09:23:31.583 回答
0

使用 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";
于 2017-01-01T20:04:44.167 回答