我是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>';
}
?>
任何帮助都将不胜感激。
答案 0 :(得分:5)
您不需要额外的SQL查询来获取您的字段名称。您可以使用您的normale 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);
}
答案 1 :(得分: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:
答案 2 :(得分: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>';
?>
答案 3 :(得分: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>';
}
?>
答案 4 :(得分: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;
}
答案 5 :(得分:0)
您可以使用PDO
来执行此类操作:
var_dump(array_keys($dbh->query('SELECT * FROM `mytablename` LIMIT 1')->fetch(PDO::FETCH_ASSOC)));
答案 6 :(得分: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";