基于MYSQL查询结果的PHP while循环错过了第一行

时间:2014-04-13 23:34:11

标签: php mysql while-loop

我有这个php从我的数据库获取行,但是当我将结果循环到我的网站上的div时,它总是错过了它检索到的第一行,我不知道为什么。

                $db = mysqli_connect('localhost', 'root', '', 'cdb')
                or die('Error connecting');

                if( isset($_REQUEST['page'])) {
                  $_SESSION['page'] = $_REQUEST['page'];
                }else{
                  $_SESSION['page'] = 1;
                }
                $records_per_page = 8;

                $where =  substr($where, 0, -3);

                $query = "SELECT * FROM cars 
                              ".$where."";

                $result = mysqli_query($db, $query)
                  or die("Error in query: '$query'");
                $row = mysqli_fetch_assoc($result);
                $i = 0;
                $start = ($_SESSION['page'] - 1) * $records_per_page;
                $end = ($_SESSION['page']) * $records_per_page;
                while($row = mysqli_fetch_assoc($result) and $i < $end) 
                {
                  $i++;
                  if( $i > $start ) 
                  {    
                    echo'                   

                    <div class="result_main flip'.$i.' shadow2">

                        <div class="main_result_carname">   
                            <h2><b>'.$row['make'].' '.$row['model'].'</b></h2>
                        </div> 
                        <div class="main_result_carprice">
                            <h2><b>£'.$row['price'].'</b></h2>
                        </div>


                    </div>';
                  }
                }
                ?>

看着它,我觉得它应该可以正常工作,但总是从第2行开始,我能看到的唯一可能影响它的变量是$ i。没有理由从1开始应该是错误的,但无论如何,将其设为-1导致没有显示记录,并使其为0使其保持不变,同时使其为-1使其从第3行开始,并使其成为2它从第2行开始。

1 个答案:

答案 0 :(得分:3)

删除

$row = mysqli_fetch_assoc($result);

在你的

之前
$i = 0;

$result = mysqli_query($db, $query)
  or die("Error in query: '$query'");
$row = mysqli_fetch_assoc($result);
$i = 0;

这是选择你的第一行并向前移动内部指针

while($row = mysqli_fetch_assoc($result) and $i < $end)

将从第2行开始选择