【发布时间】:2018-10-24 18:50:17
【问题描述】:
我正在测试将查询输出到 html 表中,但由于某种原因,我无法弄清楚为什么会跳过查询的第一条记录。
假设我的查询是
$userResults = pg_query($db,"SELECT * FROM users;");
还有我的table;
<table id='table1'>
<div id='t1' class='table100-head'>
<thead>
<tr class='row100 head' id="tblHeader">
<!-- Table header -->
<?php
$header = pg_fetch_assoc($userResults);
foreach ($header as $column => $value) {
$columnName = trim($column,"'");
echo "<th class='cell100 column2'>" . $columnName . "</th>";
}
?>
</tr>
</thead>
</div>
<div class='table100-body js-pscroll'>
<tbody id="tblBody">
<?php
while ($body = pg_fetch_assoc($userResults)) {
echo "<tr class='row100 body'>";
foreach ($body as $column2 => $value2) {
echo "<td class='cell100 column2'>" . $value2 . "</td>";
}
echo "</tr>";
}
?>
</tbody>
</div>
</table>
除了第一条记录之外,以上将导致<tbody> 中的所有行都符合预期。例如,如果结果中的 user_id 为 1 到 10,则只会出现 2 到 10。
我知道这与循环有关,但我无法指出确切的位置。我不想专门使用 while 循环的原因是因为;
- 我不想以编程方式指定列名。
- 列名因用户而异
我该如何解决这个问题?
【问题讨论】:
-
这是因为您正在运行 pg_fetch_assoc 来获取加载第一条记录的标题,并且当您再次调用它时,它会将光标移动到第二条记录。保留 for each 中的值并在第一行之前将它们回显,或者想一个更好的方法来获取您的列。
-
@RiggsFolly
pg_query()之后的代码与我在问题中提出的完全一样。我没有遗漏任何东西。 -
你可以有 $printedHeaders = false; while fetch { if !$printedHeader, 打印标题。继续打印列}
-
@JackWilko 这实际上听起来像问题。让我试试修复。
标签: php postgresql foreach html-table while-loop