出于某种原因,我在从数据库中检索数据时遇到问题。它不包括列出的第一个项目。
连接:
mysql_select_db($database_my_db, $my_db);
$query_rs_jobboards11 = "SELECT * FROM jobBoardsSpecTypes ORDER BY type";
$rs_jobboards11 = mysql_query($query_rs_jobboards11, $my_db) or die(mysql_error());
$row_rs_jobboards11 = mysql_fetch_assoc($rs_jobboards11);
$totalRows_rs_jobboards11 = mysql_num_rows($rs_jobboards11);
输出:
<form action="" method="get">
<select name="specialty">
<?php do { ?>
<option value="<?php echo $row_rs_cms11['type']; ?>"><?php echo $row_rs_cms11['type']; ?></option>
<?php } while ($row_rs_cms11 = mysql_fetch_assoc($rs_jobboards11)); ?>
</select>
<input type="submit" value="Go" />
</form>
它不断遗漏类型列中的第一个条目。如果我添加更多条目,则会显示之前遗漏的条目,并隐藏新条目。
我做错了什么?数据库对于除此页面之外的所有内容都可以正常工
答案 0 :(得分:9)
您已将第一行分配给$row_rs_jobboards11
,因此当您在do / while循环中调用$row_rs_cms11 = mysql_fetch_assoc($rs_jobboards11)
时,它将从表格的第二行开始。
使用do / while而不是一会儿没有任何区别,但使用不同的变量名确实有所不同。
更新,解释while,do / while之间的区别,并确保您的变量名称正确。
while循环,有效:
while ($row_rs_cms11 = mysql_fetch_assoc($rs_jobboards11)) {
echo '<tr>';
//stuff here
echo '</tr>';
}
执行/ while循环,也适用
$row_rs_cms11 = mysql_fetch_assoc($rs_jobboards11);
do {
echo '<tr>';
//stuff here
echo '</tr>';
} while ($row_rs_cms11 = mysql_fetch_assoc($rs_jobboards11));
请注意$ row变量匹配。如果你省去第一个电话,它仍然可以工作,但在输出任何内容之前你会得到一个额外的(空的)。如果将变量设置为其他名称(并使用mysql_fetch_ *调用),则内部数据库指针将设置为表中的第二行。因此,您错过了表中的第一行,因为它设置为不同的(未使用的)变量。
故事的道德:
您可以使用while或do / while循环,只需确保
答案 1 :(得分:3)
因为您使用的是do-while而不是while。在第一次迭代时,$ row_rs_cms11未定义。
答案 2 :(得分:2)
您正在使用$ row_rs_cms11,其中您的意思是$ row_rs_jobboards11(第一次没有定义$ row_rs_cms11)。
<?php do { ?>
<option value="<?php echo $row_rs_jobboards11['type']; ?>"><?php echo $row_rs_jobboards11['type']; ?></option>
<?php } while ($row_rs_jobboards11 = mysql_fetch_assoc($rs_jobboards11)) ?>
</select>
如果您使用while()而不是do {} while(),则错误会更明显。
如果您按照建议将do {} while()更改为while(),则需要删除首次获取$ row_rs_jobboards11的代码部分。
答案 3 :(得分:2)
在do / while循环的第一次迭代中,未设置$row_rs_cms11
。它在while
代码的下一次迭代中设置,但第一次通过它是空白的。我相信你只是错误地命名了一个变量。
改变这个:
$row_rs_jobboards11 = mysql_fetch_assoc($rs_jobboards11);
对此:
$row_rs_cms11 = mysql_fetch_assoc($rs_jobboards11);
更好的是,根本不要先执行mysql_fetc_assoc()
调用,只需将do/while
循环更改为while
循环,然后在那里读取第一行