mysqli忽略表中的第一行

时间:2012-11-13 09:51:17

标签: php mysqli

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

require_once 'connect.php';
            $sql = "SELECT * FROM `db-news`";
                $result = $mysqli->query($sql) or die($mysqli->error.__LINE__);
                    $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,但仍会在数据库中忽略第一行。

DB的设置如下:

CREATE TABLE IF NOT EXISTS `db-news` (
  `id` int(6) NOT NULL AUTO_INCREMENT,
  `pagename` TEXT(300) NOT NULL,
`pageurl` TEXT(300) NOT NULL,
`pagetitle` TEXT(300) NOT NULL,
`pagekeywords` TEXT(300) NOT NULL,
`pagecontent` TEXT(300) NOT NULL,
`extrafield1` TEXT(300) NOT NULL,
`extrafield2` TEXT(300) NOT NULL,
`extrafield3` TEXT(300) NOT NULL,
`extrafield4` TEXT(300) NOT NULL,
  PRIMARY KEY (`id`)
)

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

4 个答案:

答案 0 :(得分:7)

mysqli not ignoring it but actually you are fetching first row before while loop

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

答案 3 :(得分: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>');
}