1

我正在尝试编写一个 PHP 函数,它将为许多不同的数据库表输出 HTML 中的所有字段。表格的行和列各不相同,所以我试图想出一个方法。

就像这里的例子 -如何使用 PHP 获取列中的所有值?

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

4

5 回答 5

5

也许是这样的?

echo "<table>";

while ($row = mysql_fetch_array($query))
{
    echo "<tr>";

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

    echo "</tr>";

}

echo "</table>";

更新

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

于 2012-09-13T19:13:36.797 回答
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);
于 2012-09-13T19:45:11.597 回答
0
$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);
    }
}
于 2013-09-06T06:51:51.130 回答
0

我是 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://stackoverflow.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>';
}
于 2014-02-01T15:44:46.680 回答
-1

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

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

于 2012-09-13T19:12:51.607 回答