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 に答える