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:您是正确的,这是正确的答案