2

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

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>');
}

始终忽略第一行。我不会mysqli_fetch_assoc像其他一些关于 SO 的例子那样打电话两次。我尝试在 while 循环中更改echoprintf,但数据库中仍然忽略了第一行。

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

4

4 回答 4

8

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

$row = mysqli_fetch_assoc($result); //remove this line
while ($row = $result->fetch_assoc()) {
   ....
}
于 2012-11-13T09:53:33.783 回答
2

问题是以下摘录的第一行:

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

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

于 2012-11-13T09:54:47.177 回答
0

mysqli_fetch_assoc()与此相同$result->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>');
}
于 2020-07-25T22:52:31.493 回答
-1

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

于 2018-09-03T21:36:28.977 回答