我有1个数据库表包含行:
TABLE FROM预订:
attandee01
attandee02
attandee03
attandee04
attandee05
attandee06
PHP代码:
$q = $db->query("SELECT * FROM bs_events
LEFT JOIN bs_reservations ON bs_reservations.id_event = bs_events.id");
while($r = $q->fetch_array(MYSQLI_ASSOC)):
echo '<td>' . $r['attandee1'] . '</td>';
echo '<td>' . $r['attandee2'] . '</td>'
echo '<td>' . $r['attandee3'] . '</td>'
endwhile;
或者是否有任何简单的方法使用foreach来回显attandee1 - attandee10?
答案 0 :(得分:4)
$q = $db->query("SELECT * FROM bs_events
LEFT JOIN bs_reservations ON bs_reservations.id_event = bs_events.id");
while($r = $q->fetch_array(MYSQLI_ASSOC)):
foreach($r as $value) {
echo '<td>' . $value . '</td>';
}
endwhile;
应该回显每个表行的每个列值。
编辑:如果您只想要与会者:
$q = $db->query("SELECT * FROM bs_events
LEFT JOIN bs_reservations ON bs_reservations.id_event = bs_events.id");
while($r = $q->fetch_array(MYSQLI_ASSOC)):
for($i = 1; $i < 11 $i++) {
echo '<td>' . $r['attendee'.$i] . '</td>';
}
endwhile;
答案 1 :(得分:1)
当然,你可以使用foreach,因为$r
是一个常规数组,可以使用foreach()运算符进行迭代。你试过吗?
但是,查看字段名称,我怀疑您的数据结构存在严重的设计缺陷 似乎attandees应该存储在另一个表中。
您也可以考虑使用模板。直接从数据库循环打印数据是非常糟糕的做法。您必须先获取所有数据,然后才开始打印出来。
答案 2 :(得分:1)
好的是:
for($i=1; $i<11; ++$i) {
echo "<td>".$r["attandee".$i]. "</td>";
}
但这就是专栏,你想要的是基于行的解决方案,我会使用类似的东西:
for($r=$q->fetch_assoc(); !is_null($r); $r= $q->fetch_assoc()) {
echo "<td>".array_pop($r)."</td>"; // output the only element in the array?
}
$q->free(); // don't forget to free the memory of the result set!
答案 3 :(得分:1)
不知道我是否理解你的问题...这就是你要找的东西:
while($row = $q->fetch_array(MYSQLI_ASSOC)):
foreach($row as $field){
echo '<td>' . $field . '</td>';
}
endwhile;
答案 4 :(得分:0)
不确定这是否是您正在寻找的,但请试一试:
while($r = $q->fetch_array(MYSQLI_ASSOC)) {
foreach($r as $value) {
echo '<td>' . $value . '</td>';
}
}
答案 5 :(得分:0)
例如,您可以使用替代语法。
<table>
<?php foreach ($mysqli->query($sql) as $row ): ?>
<tr><td><?php echo $row['row_name1']; ?></td><td><?php echo $row['row_name2']; ?></td></tr>
<?php endforeach; ?>
</table>