如何在这种情况下编写查询: 这是查询
$gdQuery = $conn->query("blah blah ");
我想将上述查询用于两次while循环。
这是一种正确的方法,如果不能我怎么做..?
<table>
<thead>
<th>Paricipant</th>
<?php while($gdData = $gdQuery->fetch_assoc()) { ?>
<th class="text-center"><?php echo $gdData['name']; ?></th> <?php } ?>
<th>Score</th>
</thead>
<tbody>
<tr>
<?php while($gdData = $gdQuery->fetch_assoc()) { ?>
<td><?php echo $gdData['student_fname']; ?></td> <?php } ?>
<td style="line-height:45px">Score</td>
</tbody>
</table>
我的问题是当我写第二个while循环不起作用时
答案 0 :(得分:2)
fetch_assoc从查询结果中检索一行。您可以使用它,直到该结果集中的行用完为止。通过多次调用它,您将走向结果集的末尾。这就是为什么第二次循环没有任何关系的原因。 RTD http://php.net/manual/en/mysqli-result.fetch-assoc.php
在开始迭代之前使用fetch_all获取所有行并将它们存储在变量中。将该变量用于迭代。
或者,您可以尝试使用data_seek将结果集中的指针重置为first while循环后的开头。 http://php.net/manual/en/mysqli-result.data-seek.php
答案 1 :(得分:2)
我建议将数据检索与输出分开。
第一部分应检索表中的所有数据(name
,student_fname
)并将其存储在两个数组中。
第二部分读取数组并生成html表。
这样你只需运行一次代价高昂的查询。
答案 2 :(得分:2)
使用PDOStatement::fetchAll()
方法获取所有列和行。
然后,使用PDO::FETCH_ASSOC
方法的$fetch_style
PDOStatement::fetchAll()
参数来获取关联数组。
$gdQuery = $conn->query('blah blah ');
$gdDatas = $gdQuery->fetchAll(PDO::FETCH_ASSOC);
然后,您将使用您的数据获得一个查询。然后,您可以关联地访问数据。
答案 3 :(得分:2)
如果你想在页面的两个地方使用相同的循环但想要获取不同的列名,那么这不是问题。
$gdQuery = $conn->query('blah blah ');
$gdDatas = $gdQuery->fetchAll(PDO::FETCH_ASSOC);
将此查询写在页面顶部,并在不同位置使用$ gdDatas。 或者,如果要在多个位置使用查询,请更改变量名称并使用它。