使用do while 的时候:
$sql="select * from schedule order by startTime desc limit 0,10";$query = mysql_query($sql,$conn);
$result=mysql_fetch_array($query);
print_r($result[startTime]);
echo "<br>";
$n=1;
do{
 echo $result[startTime];
 echo "<br>";
echo $n;
echo "<br>";
$n++;}
while($result=mysql_fetch_array($query))检索结果如下:
2009-09-07 19:15:09
2009-09-07 19:15:09
1
2009-09-07 19:14:19
2
2009-09-07 19:14:19
3
2009-09-07 19:14:00
4
2009-09-07 19:13:48
5
2009-09-07 19:11:31
6
2009-09-07 19:10:31
7
2009-09-07 19:10:31
8
2009-09-07 18:47:07
9
2009-09-02 14:00:00
10
第一条是打印出来的
然而用while 的时候$sql="select * from schedule order by startTime desc limit 0,10";$query = mysql_query($sql,$conn);
$result=mysql_fetch_array($query);
print_r($result[startTime]);
echo "<br>";
$n=1;
while($result=mysql_fetch_array($query))
{
 echo $result[startTime];
 echo "<br>";
echo $n;
echo "<br>";
$n++;}
检索出来的结果是 2009-09-07 19:15:09
2009-09-07 19:14:19
1
2009-09-07 19:14:19
2
2009-09-07 19:14:00
3
2009-09-07 19:13:48
4
2009-09-07 19:11:31
5
2009-09-07 19:10:31
6
2009-09-07 19:10:31
7
2009-09-07 18:47:07
8
2009-09-02 14:00:00
9
第一条是打印的总结:用do while 的时候可以检索出来所有的列表
但用while却会丢失第一条数据请指教,这是为什么?

解决方案 »

  1.   

    因为 mysql_fetch_array($query)每执行一次,就会自动指向下一条记录。你试试这样就明白了:$result=mysql_fetch_array($query);
    print_r($result[startTime]);
    echo " <br>"; 
    $result=mysql_fetch_array($query);
    print_r($result[startTime]);
    echo " <br>"; 
    $result=mysql_fetch_array($query);
    print_r($result[startTime]);
    echo " <br>"; 
    $result=mysql_fetch_array($query);
    print_r($result[startTime]);
    echo " <br>"; 每一次输出的结果都不一样
      

  2.   

    第三行
    $result=mysql_fetch_array($query); 这个地方你已经取出一条数据了
      

  3.   

    也就是说,在你的程序执行到这一句while($result=mysql_fetch_array($query))时已经指向第二条记录了,只不过用do while的时候先执行的是do子句,第一条记录还没被接下来的while表达式覆盖掉
      

  4.   

    $query = mysql_query($sql,$conn); 
    $result=mysql_fetch_array($query); <=== 这里已经读取了一次
    print_r($result[startTime]); 
    echo " <br>"; 
    $n=1; 
    while($result=mysql_fetch_array($query)) <=== 这里是从第二条记录读起