我正在测试将查询输出到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循环的原因是;
我该如何解决?
答案 0 :(得分:2)
在显示标题时,您正在获取第一次迭代中的第一个。呼叫pg_fetch_assoc($userResults)
将获得下一行。
在开始下一次迭代之前,需要将“在结果资源中设置内部行偏移量”设置为0。使用:
pg_result_seek($userResults, 0);
您应该以如下形式结束: ...
<?php
pg_result_seek($userResults, 0);
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>";
}
?>
答案 1 :(得分:0)
您可以使用do-while,
<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
do {
echo "<tr class='row100 body'>";
foreach ($body as $column2 => $value2) {
echo "<td class='cell100 column2'>" . $value2 . "</td>";
}
echo "</tr>";
} while ($body = pg_fetch_assoc($userResults))
?>
</tbody>
</div>