【问题标题】:PHP "for loop" <th> tag, from MySQL database to HTML TablePHP "for loop" <th> 标签,从 MySQL 数据库到 HTML 表
【发布时间】:2019-09-19 10:48:39
【问题描述】:

我从“MySQL 数据库”制作了一个“HTML 表”。 我能够执行“php 循环”来检索“单元格标签&lt;td&gt;”,但我怎样才能执行“php 循环”来检索“标题标签&lt;th&gt;”?谢谢。

这是我的代码:

$query = "SELECT * FROM Landscapes";
$queryResult = $conn->query($query);

echo "<table>";

while ($queryRow = $queryResult->fetch_row()) {
    echo "<tr>";
        for($i = 0; $i < $queryResult->field_count; $i++){
        echo "<td>$queryRow[$i]</td>";
        }
    echo "</tr>";
}

echo "</table>";

【问题讨论】:

  • 您好,欢迎来到堆栈溢出。我很乐意提供帮助,但感觉缺少一些信息。您希望从哪里获得标题行?它来自不同的查询吗?你使用的是数据库表列名吗?
  • 嗨。 1-“标题行”就在 标签之后。 2-不,这是同一个查询。 3-是的,它是“数据库表列名”。

标签: php mysql for-loop html-table


【解决方案1】:

您好,欢迎来到堆栈溢出!

您需要一种方法来使用列名从数据库中检索所有数据。
PDO::query 方法返回 PDO::Statement,因此您可以使用 PDO::fetchAll 获取所有数据并将 PDO::FETCH_ASSOC 作为参数传递给从数据库中检索数据作为关联数组,并从您的代码中删除 while 循环。

因此,一旦有了一组数据,您就可以使用array functions 对其进行操作,然后您的代码将如下所示:

$stmt = $conn->query('SELECT * FROM Landscapes');
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

$headers    = sprintf('<thead><tr><th>%s</th></tr></thead>', join('</th><th>', array_keys($result[0])));
$content    = '';

foreach ($result as $result) {
   $content .= sprintf('<tr><td>%s</td></tr>', join('</td><td>', array_values($result)));
}

printf('<table border="1">%s%s</table>', $headers, $content);

相关链接:

【讨论】:

  • 非常有趣。感谢您提供此链接。
【解决方案2】:

使用fetch_assoc() 代替fetch_row()。它将返回一个关联数组,其键是列名。

当第一行结果你可以再打印列标题。

$firstRow = true;
while ($queryRow = $queryResult->fetch_assoc()) {
    if ($firstRow) {
        echo "<tr>";
        foreach (array_keys($queryRow) as $name)) {
            echo "<th>$name</th>";
        }
        echo "</tr>";
        $firstRow = false;
    }
    echo "<tr>";
    foreach($queryRow as $value){
        echo "<td>$value</td>";
    }
    echo "</tr>";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多