Php 仅获取数组mysql中的列名
我对php和mysql都是新手。我想创建一个动态表,其中包含mysql数据库中表中的所有字段。我正在尝试获取数组中的所有列名,但失败了。我正在尝试以下代码:Php 仅获取数组mysql中的列名,php,mysql,Php,Mysql,我对php和mysql都是新手。我想创建一个动态表,其中包含mysql数据库中表中的所有字段。我正在尝试获取数组中的所有列名,但失败了。我正在尝试以下代码: <?php $fields = mysql_query("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'mytablename' "); $res = mysql_fetch_array($fields); foreach ($res
<?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查询来获取字段名。您可以使用normale SELECT查询,只需从该查询中获取字段名(和定义)。这样性能更好
不推荐的MySQL解决方案:
MySQL库已弃用。它可以像在这个链接中一样使用,btu您应该切换到mysqli库,它在使用过程中几乎相同(第二个示例)
htttp://www.php.net/manual/en/function.mysql-field-name.php
面向对象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();
}
$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);
}
程序化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();
}
$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);
}
请注意,此代码使用mysqli_*php库,因为旧版mysqli_*库已被弃用,不应使用
这可能会奏效
<?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>';
?>
使用以下方法:
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:
而不是$field
这将给出列名
执行查询后,查询返回以下字段:
var_dump(array_keys($dbh->query('SELECT * FROM `mytablename` LIMIT 1')->fetch(PDO::FETCH_ASSOC)));
您可以使用PDO
执行类似操作:
<?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>';
}
?>
使用:
尝试以下功能:
$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";
函数mysql\u字段\u数组($query){
$field=mysql\u num\u字段($query);
对于($i=0;$i<$field;$i++){
$names[]=mysql\u field\u name($query,$i);
}
返回$names;
}
使用PDO库创建具有字段名的表行:
$db=newpdo('mysql:host=localhost;dbname=databasename','user','password');
回声“;
$query=$db->prepare(“显示“表”中的列”);
$query->execute();
$fields=array();
而($result=$query->fetch(PDO::fetch_ASSOC)){
回显“$result[字段]”;
$fields[]=$result['Field'];
}
回音“\n”;
您得到了什么?使用print\r($fields)进行调试!。。。php debuggingFYI中一个非常有用的命令,mysql.*
已被弃用。您应该使用mysqli
或PDO
。我在每个值前面得到应用数学字段1名称、字段1名称、int(3)、int(3)、NO、NO和textfield-1:NEVER;是否建议使用不推荐的库提出问题。PHP中不推荐使用mysql_*lib,即使作者正在使用该库。至少放一个免责声明。部分更新;)再次检查它。我很高兴现在删除我的-1。我在顶部添加了一个小的免责声明,只是为了警告盲目复制粘贴者。@STTLCU感谢鸟瞰图,它帮助了我,希望还有这个问题的海报。上帝保佑你,有没有一种方法可以不用我的QLND来完成这项工作。mysqli_fetch_assoc仅适用于mysqlnd?它有效,萨利姆,感谢大家的帮助。非常感谢。Reg,mysql_*函数已弃用。请不要遵循这个答案。mysql_*是危险的,但它仍然被广泛使用。我们应该努力让PHP发展成为一个更好的地方,所有的事情,甚至是一点点,都必须完成。谢谢@STTLCU,我应该用什么来代替mysql_query和mysql_fetch_array?@user2806222重构您的代码以使用PDO库。我发誓,你永远不会后悔的。从这里开始:@user2806222使用fetch\u assoc
和while代替foreach。那就试试吧。请不要建议使用mysql_*库函数。它们已经被弃用了。是的,我添加了更新的mysqli版本。请通知Tnx。