以下是我用来从表中提取数据的代码:
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`)
)
我不知道接下来应该尝试什么?
答案 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>');
}