Делаем загадочные движения руками, незаметно меняем тег br на td и... Магия!
foreach($row as $v) {
echo "<td>$v</td>";
}
Но на самом деле обычно так не делают, и действительно вытаскивают "что-то одно". Попутно разделяя работу с SQL и HTML и защищаясь от инъекцй. Для этого:
- сначала получаем нужные на странице данные. Если выводим список, то записываем его в массив
- только после того как все данные получены и обработаны, можно начинать вывод. В простейшем варианте закрываем тег РНР и начинаем выводить HTML и в нужных местах - запрошенные выше данные
- не забывая их в обязательном порядке экранировать
$data = $mysqli->query('SELECT * FROM users')->fetch_all(MYSQLI_ASSOC);
?>
<table>
<?php foreach($data as $row): ?>
<tr>
<td><?=htmlspecialchars($row['id'], ENT_QUOTES) ?></td>
<td><?=htmlspecialchars($row['name'], ENT_QUOTES) ?></td>
<td><?=htmlspecialchars($row['email'], ENT_QUOTES) ?></td>
</tr>
<?php endforeach ?>
</table>