很多人会认为这是一个重复的问题并且已经给出了该问题的答案。但是我有一个不同的问题,在这里我不知道列数和列名!
我在html中有一个文本输入类型,用户可以在其中直接操作数据库。 用户可以查询数据库中的任何表。 所有表具有不同的列名和列数。 而且我不能使用'describe'和'show column'sql语句,因为该列的名称未知。
这个问题的所有答案都认为程序员已经知道列名
和表中的列数。
所以问题是:
如何获取表中的列数?
如何获取表的列名以将其显示在表标题标签中?
MySQL查询可能重复以获得列名?
@ssemilla我想你不明白这个问题。 数据库中有很多表。 用户可以在运行时查询任何表,因此表名未知。 您显示的可能重复的问题假设该表的名称是已知的!
您应该指定用户也不知道表名。 无论如何,您只需要查询表名,例如 SELECT table_name FROM information_schema.tables;,并将其与stackoverflow.com/questions/8334493/中的答案结合起来
使用SHOW COLUMNS FROM your_table_name_here,当您获取结果时,行数的计数将告诉您有多少列。
返回的部分数据包含在您可用于表标题的列的名称中。
$ColsQ = $yourdb->prepare('SHOW COLUMNS FROM ' . $your_table_name_here);
$ColsQ->execute();
$ColsD = $ColsQ->fetchAll(PDO::FETCH_ASSOC);
echo 'There are ' . count($ColsD) . ' columns in the table';
foreach ($ColsD as $Column) {
echo 'Column name is ' . $Column['Field'];
}
感谢您的答复,但这仍然不能解决我的问题。 期望程序员已经知道列的名称。 在我的网站上,用户可以查询数据库中的任何表,因此在用户键入查询之前,表名是未知的。
不,不是的。 第一个查询检索列的名称。 foreach循环报告每个名称是什么。 您是否尝试过我发布的内容?
您说您的网站要求的唯一信息就是表格的名称。
您可以使用DESC TABLE_NAME。
迭代返回以了解字段的数量。
感谢您的答复,但我发现了获取表中字段数的另一种方法。 也就是说,mysqli_num_fields($ result)。 现在,我想获取的所有内容均为该列的标题
DESC" TABLE_NAME"返回一些记录,其中之一[Field]是这些列的名称。 那不能回答你的问题吗?
所以我从php文档中得到了我的问题的答案! 在这里,我将发布执行"选择" SQL语句的代码片段,该语句在运行时执行,该语句显示标头以及我从执行查询得到的结果中的表记录。
if(strcmp($words[0],"select")==0) //for making sure its select statement
{
$result= mysqli_query($conn, $sql);
if($result)
{
echo '
echo '
';for($i=0;$i
{
$column_info=mysqli_fetch_field_direct($result, $i);
/*this function returns all the information about table metioned in the query.
variable i over here refers to field no*/
echo"
".$column_info->name.""; //here fetching only name from whole information}
echo '
';while ($row = mysqli_fetch_array($result))
{
echo '
';for($i=0;$i
{
echo '
'.$row[$i].'';}
echo '
';}
echo '
';}
else
{
echo"alert('Error occured, Please check your syntax or internet connection')";
}
}
有关详细信息:
mysqli_fetch_field_direct(mysqli_result $ result,int $ fieldnr)函数的PHP文档页面