0

我想查询一个表的列名,放入一个数组,然后将该数据用于 html 的表中,就像这样

<?php
$ser='localhost';
$usr='root';
$pas='password';
$bsd='basedata';
$tab='contact';

try
{
    $dbh = new PDO('mysql:host='.$ser.';dbname='.$bsd.'', $usr, $pas);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $query = $dbh->prepare("SHOW FIELDS FROM $tab ");
    $query->execute();
    echo "<tr>";
    $i=0;

    while ($dat = $query->fetch()) {
        $nombre_columna[$i]=$dat[0];
        echo "<th>".$nombre_columna[$i]."</th>";
        $i++;
    }
    echo "</tr>\n";
    $dbh = new PDO('mysql:host='.$ser.';dbname='.$bsd.'', $usr, $pas);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $query = $dbh->prepare("SELECT * FROM $tab");
    $query->execute();
    $j=$i;
    $i=0;
    while ($dat = $query->fetch()) {
        echo "<tr>";
        while ($i<$j) {
            echo "<td>".$dat[$nombre_columna[$i]]."</td>";
            $i++;
        }
        echo "</tr>\n";
    }
    $dbh=null;
    ?>      

所以当我运行代码时,它只显示查询的第一行,但不再显示

4

1 回答 1

0

我认为您误解了输出。它遍历表中的每一行,但你的问题是循环while ($i<$j)只会在第一次通过,因为你不断增加 的值$i,所以它永远不会小于$j第一次迭代之后。您需要$i在每次迭代时重置 的值,而不是在循环之前重置。

while ($dat = $query->fetch()) {
    $i=0; // <-- This will fix it
    echo "<tr>";
    while ($i<$j) {
        echo "<td>".$dat[$nombre_columna[$i]]."</td>";
        $i++;
    }
    echo "</tr>\n";
}

如果你查看源代码,我猜你会看到一堆这样的:

<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
于 2013-02-20T23:09:33.320 回答