我对 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);
}
使用这个:
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";
PHP mysqli 有 mysqli_fetch_fields,它返回一个包含所有字段数据(名称、类型、长度)的对象,只需迭代该对象并将名称值放入数组中即可。
$result = mysqli_query($conn , $sql)
$fieldinfo = mysqli_fetch_fields($result);
$fields = [];
foreach ($fieldinfo as $val) //iterate Object
$fields[] = $val->name; //populate array
print_r($fields);