【问题标题】:PHP while loop based on MYSQL query results missing out first row基于MYSQL查询结果的PHP while循环丢失了第一行
【发布时间】:2014-04-14 07:35:56
【问题描述】:

我有这个 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>';
                  }
                }
                ?>

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

【问题讨论】:

  • 您的$where 摄像头来自哪里? (只是出于兴趣)
  • $where = " WHERE "; foreach ($_POST['carID'] as $carID) { $where = $where." carIndex = ".$carID." OR"; } 可能有更简单的方法,但我发布了一个数组,需要将其中的值应用于 where 子句。我在查询之前有$where = substr($where, 0, -3);,以摆脱最后的“OR”。
  • 缺少消毒处理...$where = "carIndex IN (".implode(',', $_POST['carID']).")" 不需要 substr.

标签: php mysql while-loop


【解决方案1】:

删除

$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)

将从第二行开始选择

【讨论】:

  • Awww Yisss 谢谢,不知道为什么我把它放在那里,现在显示第一行。
猜你喜欢
  • 1970-01-01
  • 2016-12-23
  • 2017-05-22
  • 2017-02-02
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2015-02-14
  • 2011-10-11
相关资源
最近更新 更多