使用 PHP 选择并显示 MySQL 表中的所有字段以获取无限量的列

Posted

技术标签:

【中文标题】使用 PHP 选择并显示 MySQL 表中的所有字段以获取无限量的列【英文标题】:Select and Display All Fields from MySQL Table for indefinite amount of columns with PHP 【发布时间】:2012-09-06 22:37:14 【问题描述】:

我正在尝试编写一个 php 函数,它将为许多不同的数据库表以 html 格式输出所有字段。表格的行和列各不相同,所以我正在尝试提出一种方法。

就像这里的例子 - How get all values in a column using PHP?

但是,如果我不知道数据库中每一行有多少列,或者它们的名称,那么当每个数据库的列和行都不同时,如何从 "SELECT * FROM $mytable" 查询中输出数据?

【问题讨论】:

你想把一个mysql数据库转储到html吗?为什么?如果您想可视化您的数据库,请查看 phpmyadmin。 你想达到什么目的? 那么问题是关于输出可变数量的字段还是关于格式化 HTML?这似乎包罗万象。那么为什么需要设置$column1$column2等变量呢?这与输出格式无关。你真正想做什么?你是想用 shell 脚本还是 PHP 来解决这个问题? 通常,通过 PHP 输出 MySQL 表中所有数据的标准方法是对通过查询获得的数组进行 while 循环,然后通过调用该字段的名称来显示每个字段。抱歉,如果我展示的内容令人困惑。我想简单地调用一个 MySQL “Select * FROM $mytablevariable”,然后通过 PHP 将其输出为 HTML。 使用while 循环到底有什么问题?我知道不想使用静态字段名称来访问行值,因为您可能并不总是知道列名。但我不知道你为什么不想使用循环。 【参考方案1】:

您可以使用 SQL 命令"SHOW TABLES" 获取数据库中所有表的列表。

然后您可以遍历结果并查询每个表的字段。

【讨论】:

这不是问题。【参考方案2】:

也许是这样的?

echo "<table>";

while ($row = mysql_fetch_array($query))

    echo "<tr>";

    foreach($row as $value)
    
        echo "<td>".$value."</td>";
    

    echo "</tr>";



echo "</table>";

更新

由于这个答案似乎仍然受到一些关注,我觉得有必要注意到它,因为它基于一个现在已经过时的示例(链接在原始问题中),所以这个答案本身也已经过时了。这是由于使用了 mysql 扩展名,该扩展名现已弃用/删除(取决于您的 PHP 版本)。相反,您应该使用PDO 或mysqli

【讨论】:

什么什么?为什么投反对票?没有评论给出理由?来吧人们。 您提供的示例循环通过无限量的 ROWS,而不是列。这是从查询中输出结果的传统方式,当您知道在这种情况下只有 1 个“值”时。但是,当每行中有多个列时,这将不起作用。 @RCNeil 不,你错了。我的答案在行和列中循环。这就是foreach 正在做的事情。 while 一次获取一行并将其存储到 $row 变量中。然后使用foreach 循环遍历行的每一列。 好的。它对我不起作用,所以我不能 100% 确定这是一个正确的方法,但是当我错了我会吃掉它...... @PatrickQ 我现在正在尝试这个,但我得到了每个值的重复。行输出看起来正确,只是值重复。任何想法为什么会发生?干杯!【参考方案3】:

这将构建一个表,其标题行包含列名。在某些地方可能会更有说服力,但如果我了解您的要求,则解决方案会很糟糕。

function tableme($result)
    $header='';
    $rows='';
    while ($row = mysql_fetch_array($result))  
        if($header=='')
            $header.='<tr>'; 
            $rows.='<tr>'; 
            foreach($row as $key => $value) 
                $header.='<th>'.$key.'</th>'; 
                $rows.='<td>'.$value.'</td>'; 
             
            $header.='</tr>'; 
            $rows.='</tr>'; 
        else
            $rows.='<tr>'; 
            foreach($row as $value) 
                $rows .= "<td>".$value."</td>"; 
             
            $rows.='</tr>'; 
        
     
    return '<table>'.$header.$rows.'</table>';

只需从您的查询中用您的$result 调用它;

 echo tableme($result);

【讨论】:

太好了,谢谢! quick-and-dirty 报告非常方便。就我而言,我只需要更改:. . . while ($row = mysql_fetch_array($result)) 至:while ($row = $result-&gt;fetch_assoc()) 【参考方案4】:
$query = "SELECT * FROM `ios7_google`";

$result = mysql_query("SHOW COLUMNS FROM `ios7_google`.`graph_geo_table`");
if (!$result) 
    echo 'Could not run query: ' . mysql_error();
    exit;

if (mysql_num_rows($result) > 0) 
    while ($row = mysql_fetch_assoc($result)) 
    mssql_field_name($result,0);
    //    print_r($row);
    

【讨论】:

【参考方案5】:

我是 PHP 新手,之前很欣赏 Dave(Patrick Q 编辑)的帖子。我在下面的 mysqli 版本中建立了他们的示例。提供大量评论以帮助其他人了解正在发生的事情...作为一项功能,我现在将它包含在每个具有表格输出的页面中。

/*
Function: tabular_output (mysqli_query) as string
Utilization: Given the results of a successful mysqli_query, produce a dynamic table based on the columns identified.
<th> contents are based of the fields of the array.
<td> contents are based on contents associated to the relevant fields.
The table is not limited in size or length and table attributes can be controlled external to the function via CSS

Ref: http://www.php.net/manual/en/mysqli-result.fetch-fields.php
Ref: http://***.com/questions/12413064/select-and-display-all-fields-from-mysql-table-for-indefinite-amount-of-columns
*/

function tabular_output($sql_result)
//Initiate header and rowdata for the table output.
$header='';
$rowdata='';

//Initiate header string.
$header='<tr>';
    //Assign the $sql_result field attributes to the $field array to output column headings.
    $field= mysqli_fetch_fields($sql_result);

    //Iterate through the field array to produce the name value in the header.
    foreach ($field as $val) 
        $header.= "<th>".$val->name."</th>";
    

//Header string complete.
$header.='</tr>';

//Iterate through the data ($row) contained within the passed $sql_result.
while ($row = mysqli_fetch_array($sql_result))

    //Assign the $sql_result field attributes to the $field array to dynamically handle data contents.
    $field= mysqli_fetch_fields($sql_result);

    //Initiate the rowdata string.
    $rowdata.='<tr>';

    //Iterate through the field array to produce the associated $rowdata element.
    foreach ($field as $val) 
        $rowdata.= "<td>".$row[$val->name]."</td>";
    
    $rowdata.='</tr>';

 //Rowdata string complete.
//Return the finished table string to the referring procedure.
return '<table>'.$header.$rowdata.'</table>';

【讨论】:

以上是关于使用 PHP 选择并显示 MySQL 表中的所有字段以获取无限量的列的主要内容,如果未能解决你的问题,请参考以下文章

使用复选框从 MySQL 中的多个表中选择数据,并根据复选框显示表字段

从三个表中选择 - mysql 和 php

从三个表中选择 - mysql 和 php

mysql查询加入,比较两个表并返回第一个表中的所有记录

从表中的两列中选择相同的数据,并使用一条sql语句显示所有数据

使用php从多个mysql表中获取并显示值