首页 > 解决方案 > 如何使用 PHP 在 while 循环中显示单列?

问题描述

请帮助我处理下面的代码,它没有按预期工作。我在下面的 mysql 表中有一些记录,并使用下面提到的相同列名:

id    |    name        |    referrer
1     |    User1       |    referrer_one
2     |    User2       |    referrer_one
3     |    User3       |    referrer_one
4     |    User4       |    referrer_two
5     |    User5       |    referrer_two

我希望在 while 循环中使用 PHP 将上述数据显示如下:

Referrer Username      |     Total Referrals
referrer_one           |     3
referrer_two           |     2

我正在使用下面的代码,请告诉我我做错了什么:

<table width="100%">
  <tr>
    <td>Referrer Username</td>
    <td>Total Referrals</td>
  </tr>
  <?php
  $data = $db->query("SELECT referrer, count(*) as total_member FROM 
  user_registration GROUP BY referrer");          

  while($res=mysqli_fetch_array($data,MYSQLI_BOTH)) {
      foreach ($res as $key => $value) {
  ?>    
  <tr>
    <td><?php echo ($value['referrer']); ?></td>
    <td><?php echo ($value['total_member']); ?></td>
  </tr>
  <?php } } ?>
</table>

使用上述代码后,我收到以下错误消息:

Warning: Illegal string offset 'referrer'
Warning: Illegal string offset 'total_member'

请帮助我,我真的需要有效的解决方案!

标签: phpmysqlwhile-loopphpmyadmin

解决方案


您不需要额外的foreach循环,因为 mysqli_fetch_array()一次获取​​一条记录(结果行)。

尝试这个:

while($res=mysqli_fetch_array($data,MYSQLI_BOTH)) { ?>    
<tr>
  <td><?php echo ($res['referrer']); ?></td>
  <td><?php echo ($res['total_member']); ?></td>
</tr>
<?php } ?>

使用while循环,您已经遍历结果集中的每条记录,直到没有记录为止。

使用附加foreach循环,您将遍历返回记录的每一列(总共 4 列,因为您使用了MYSQLI_BOTH):

$key = 0 and $value = some scalar value ... 
$key = 'referrer' and $value = some scalar value ...
$key = 1 and $value = some scalar value ...
$key = 'total_member' and $value = some scalar value

推荐阅读