使用2个循环查询数据库会产生错误的结果

时间:2014-12-05 00:43:47

标签: php mysqli

我正在制作一个网站面板,列出管理面板的入侵尝试。当我尝试将它们全部列出时,它只显示10个中的第一个。

这是我的代码:

  <?php
    include("xxxxxxxxx.php");
    $query = "SELECT * FROM xxxxx";
    $result = mysqli_query($link, $query) or die('[MYSQLI ERROR] '.mysqli_error($link));
    echo mysqli_num_rows($result);
    while($row=mysqli_fetch_assoc($result)) {
      $ip = $row['ip'];
      $date = $row['date'];
      $query2 = "SELECT * FROM xxxxxx WHERE ip='".$ip."'";
      $result2 = mysqli_query($link, $query2) or die('[MYSQLI ERROR] '.mysqli_error($link));
      while($row=mysqli_fetch_assoc($result)) {
        $userid .= ";".$row['id'];
        $user .= ";".$row['name'];
      }
      $userids = explode($userid, ";");
      $users = explode($user, ";");
      for($i=1;$i<=count($users);$i++) {
        $userinfo .= "<a href=\"xxx.php?id=".$userids[$i]."\">".$users[$i]."</a><br/>";
      }
      echo "
        <tr>
          <td>".$date."</td>
          <td>".$ip."</td>
          <td>".$userinfo."</td>
        </tr>
      ";
    }
  ?>

为什么它不起作用?

在你问为什么我在for()循环中从1开始之前,这是因为第一个将是&#34;&#34;而且我不需要显示结果。

2 个答案:

答案 0 :(得分:1)

你有2个while循环,它使用$ row作为变量。

更改第二个循环以使用不同的变量名称来修复它

答案 1 :(得分:0)

内部while循环耗尽第一个查询($result)的结果,而不是像第二个查询那样迭代第二个查询($result2)的结果。

简而言之,请替换此块:

while($row=mysqli_fetch_assoc($result)) {
  $userid .= ";".$row['id'];
  $user .= ";".$row['name'];
}

使用:

while($row2=mysqli_fetch_assoc($result2)) { // Note the usage of $result2.
  $userid .= ";".$row2['id'];
  $user .= ";".$row2['name'];
}