在列名查询中使用数组

时间:2013-02-20 22:49:59

标签: php mysql loops

我想查询一个表的列名,放入一个数组,然后将该数据用于表中的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;
    ?>      

因此,当我运行代码时,它会显示在查询的第一行但不再显示

1 个答案:

答案 0 :(得分: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>