为什么MySQL从数据库中检索时会遗漏第一行?

krx*_*krx 1 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());
    $row_rs_jobboards11 = mysql_fetch_assoc($rs_jobboards11);
    $totalRows_rs_jobboards11 = mysql_num_rows($rs_jobboards11);
Run Code Online (Sandbox Code Playgroud)

输出:

 <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>
Run Code Online (Sandbox Code Playgroud)

它不断遗漏类型列中的第一个条目.如果我添加更多条目,则会显示之前遗漏的条目,并隐藏新条目.

我究竟做错了什么?数据库对于除此页面之外的所有内容都可以正常工

dav*_*gr8 9

您已将第一行分配给$row_rs_jobboards11,因此当您$row_rs_cms11 = mysql_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>';
}
Run Code Online (Sandbox Code Playgroud)

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));
Run Code Online (Sandbox Code Playgroud)

请注意$ row变量匹配.如果你省去第一个电话,它仍然可以工作,但在输出任何内容之前你会得到一个额外的(空的).如果将变量设置为其他名称(并使用mysql_fetch_*调用),则内部数据库指针将设置为表中的第二行.因此,您错过了表中的第一行,因为它设置为不同的(未使用的)变量.

故事的道德启示:

你可以使用while或do/while循环,你只需要确保它

  • 如果使用do/while,则必须进入循环之前创建行变量.和,
  • 确保您的变量名称匹配!