【问题标题】:mysqli ignoring the first row in a tablemysqli忽略表中的第一行
【发布时间】:2012-11-13 09:51:16
【问题描述】:

这是我用来从表中提取数据的代码:

require_once 'connect.php';
$sql = "SELECT * FROM `db-news`";
$result = $mysqli->query($sql);
$row = mysqli_fetch_assoc($result);
while ($row = $result->fetch_assoc()) {
    printf ($row['pagename'].' - To edit this page <a href="editnews.php?id='.$row['id'].'">click here</a><br>');
}

总是忽略第一行。我不会像 SO 上的其他示例一样两次调用 mysqli_fetch_assoc。我尝试在 while 循环中将 echo 更改为 printf ,但数据库中仍然忽略了第一行。

我不知道接下来应该尝试什么?

【问题讨论】:

  • 删除此行$row = mysqli_fetch_assoc($result);

标签: php mysqli


【解决方案1】:

mysqli 没有忽略它,但实际上你是在 while 循环之前获取第一行

$row = mysqli_fetch_assoc($result); //remove this line
while ($row = $result->fetch_assoc()) {
   ....
}

【讨论】:

    【解决方案2】:

    问题出在以下摘录的第一行:

    $row = mysqli_fetch_assoc($result);
    while ($row = $result->fetch_assoc()) {
    

    mysqli_fetch_assoc 已经获得了第一行(因此在 while 循环中,您已经更进一步了)。 您应该将该行而不是 $reslut-&gt;fetch_assoc 部分放入 while 语句或删除它。这应该可以解决问题。

    【讨论】:

      【解决方案3】:

      mysqli_fetch_assoc()$result-&gt;fetch_assoc() 相同,无论何时调用此函数,它都会将内部指针前进到下一行。您在循环之前调用此函数一次,这意味着您正在读取第一行并忽略结果。删除该行。

      如果您需要获取第一行然后仍然循环遍历整个结果,请使用foreach 而不是while。例如:

      require_once 'connect.php';
      $sql = "SELECT * FROM `db-news`";
      $result = $mysqli->query($sql);
      foreach($result as $row) {
          printf($row['pagename'].' - To edit this page <a href="editnews.php?id='.$row['id'].'">click here</a><br>');
      }
      

      【讨论】:

        【解决方案4】:

        使用do while 而不是while,因为它不会跳过第一步。

        【讨论】:

          猜你喜欢
          • 2018-04-13
          • 2011-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-12
          • 1970-01-01
          • 1970-01-01
          • 2012-09-16
          相关资源
          最近更新 更多