Php 为什么MySQL在从数据库检索时会省略第一行?
由于某种原因,我在从数据库检索数据时遇到问题。它省略了列出的第一项 连接:Php 为什么MySQL在从数据库检索时会省略第一行?,php,mysql,sql,Php,Mysql,Sql,由于某种原因,我在从数据库检索数据时遇到问题。它省略了列出的第一项 连接: 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());
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>
它会一直忽略type列中的第一个条目。如果我添加了更多的条目,则会显示先前遗漏的条目,并且隐藏新条目
我做错了什么?除此页面外,数据库对所有内容都运行良好 因为您使用的是do while而不是while。在第一次迭代中,$row\u rs\u cms11未定义。因为您使用的是do while而不是while。在您的第一次迭代中,$row\u rs\u cms11是未定义的。您使用的是$row\u rs\u cms11,您真正的意思是$row\u rs\u作业板11($row\u rs\u cms11第一次没有定义)
如果使用while()而不是do{}while(),则错误会更加明显
如果您按照建议将do{}while()更改为while(),则需要删除代码中第一次获取$row_rs_作业板11的部分。您使用的是$row_rs_cms11,实际上是$row_rs_作业板11($row_rs_cms11第一次没有定义)
如果使用while()而不是do{}while(),则错误会更加明显
如果按照建议将do{}while()更改为while(),则需要删除第一次获取$row\r\u作业板11的代码部分。在do/while循环的第一次迭代中,
$row\r\u cms11
未设置。它在下一次迭代时由设置,而代码设置,但第一次通过它时为空。我相信您只是错误地命名了一个变量
更改此项:
$row_rs_jobboards11 = mysql_fetch_assoc($rs_jobboards11);
为此:
$row_rs_cms11 = mysql_fetch_assoc($rs_jobboards11);
更好的是,不要先调用mysql\u fetc\u assoc()
,只需将do/while
循环更改为while
循环,第一行将在那里读取。在do/while循环的第一次迭代中,$row\r\u cms11
没有设置。它在下一次迭代时由设置,而代码设置,但第一次通过它时为空。我相信您只是错误地命名了一个变量
更改此项:
$row_rs_jobboards11 = mysql_fetch_assoc($rs_jobboards11);
为此:
$row_rs_cms11 = mysql_fetch_assoc($rs_jobboards11);
更好的是,不要首先调用mysql\u fetc\u assoc()
,只需将do/while
循环更改为while
循环,第一行将在那里读取。您已经将第一行分配给$row\r\u作业板11
,因此当您调用$row\r\u cms11=mysql\u fetch assoc>时($rs_jobboards11)
在do/while循环中,它从表中的第二行开始
使用do/while代替while没有任何区别,但是使用不同的变量名确实会有所不同
更新,解释while、do/while和之间的区别,确保变量名正确。
While循环,它可以工作:
while ($row_rs_cms11 = mysql_fetch_assoc($rs_jobboards11)) {
echo '<tr>';
//stuff here
echo '</tr>';
}
while($row\rs\u cms11=mysql\u fetch\u assoc($rs\u作业板11)){
回声';
//这里的东西
回声';
}
do/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\u rs\u cms11=mysql\u fetch\u assoc($rs\u作业板11);
做{
回声';
//这里的东西
回声';
}而($row_rs_cms11=mysql_fetch_assoc($rs_jobboards11));
请注意,$row变量是匹配的。如果省略第一个调用,它仍然可以工作,但在输出任何内容之前,您将得到一个额外的(空的)变量。如果您将该变量设置为其他名称(并使用mysql_fetch_*调用),内部数据库指针被设置为表中的第二行。因此,您将错过表中的第一行,因为它被设置为其他(未使用)变量
故事的寓意:
您可以使用while或do/while循环,只需确保
- 如果使用do/while,则必须在进入循环之前创建行变量。并且
- 确保变量名匹配
您已经将第一行分配给了$row\r\u作业板11
,因此当您在do/while循环中调用$row\r\u cms11=mysql\u fetch\u assoc($rs\u作业板11)
时,它将从表中的第二行开始
使用do/while代替while没有任何区别,但是使用不同的变量名确实会有所不同
更新,解释while、do/while和之间的区别,确保变量名正确。
While循环,它可以工作:
while ($row_rs_cms11 = mysql_fetch_assoc($rs_jobboards11)) {
echo '<tr>';
//stuff here
echo '</tr>';
}
while($row\rs\u cms11=mysql\u fetch\u assoc($rs\u作业板11)){
回声';
//这里的东西
回声';
}
do/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\u rs\u cms11=mysql\u fetch\u assoc($rs\u作业板11);
做{
回声';
//这里的东西
回声';
}而($row_rs_cms11=mysql_fetch_assoc($rs_jobboards11));
请注意,$row变量是匹配的。如果省略第一个调用,它仍然可以工作,但在输出任何内容之前,您将得到一个额外的(空的)变量。如果您将该变量设置为其他名称(并使用mysql_fetch_*调用),内部数据库指针被设置为表中的第二行。因此,您将错过表中的第一行,因为它被设置为其他(未使用)变量
故事的寓意:
您可以使用while或do/while循环,只需确保
- 如果使用do/while,则必须在进入循环之前创建行变量。并且
- 确保变量名匹配
Yep-始终使用while循环特别是,它是未定义的,因为OP将第一行设置为$row\rs\u jobboards11,所以内部指针指向第2行。@DCAURN:不。知道当使用do while循环时您在做什么是正确的答案。@davethegr8:您是正确的,这是正确的答案