You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP调用MySQL查询订单数据时结果丢失第一行如何解决

问题原因
  • 调用mysqli_result::fetch_assoc()方法时,每执行一次就会从结果集中取出一条记录,同时将结果集的内部指针向后移动一位
  • 你在while循环开始前额外执行了一次$row = $result->fetch_assoc(),该代码取出了按倒序排序后的第一条订单数据,但没有存入$ordersArray,相当于直接丢弃了该条记录
  • 后续while循环从第二条记录开始读取,最终导致你看到的结果缺失了本该排在最前面的记录
修复方案

直接删除while循环前多余的$row = $result->fetch_assoc();代码即可,修正后的完整代码如下:

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDatabase";
$db = new mysqli($servername, $username, $password, $dbname);

$counter = 0;

$query = "SELECT * FROM `orders` WHERE `supplier` = '".session('email')."' ORDER BY `id_order` DESC";
if ($result = $db->query($query)){
    if($result->num_rows > 0) { 
        $ordersArray = array();

        // Set orders data to ordersArray 
        while($row = $result->fetch_assoc()){
            $name = $row["name"];
            $orderID = $row["id_order"];

            $ordersArray[] = array(
                'id_order'=> $orderID,
                'name'=> $name
            );
        }
        foreach($ordersArray as $row){
            if( $counter <= 4 ){
                echo ($row["name"]);
                echo ($row["id_order"]);
                $counter = $counter + 1;
            }
        }
    } else {
        echo ('<tr><td>No tienes ordenes recientes</td></tr>');
    }
}
$db->close();
额外优化建议

当前你直接将session('email')拼接进SQL语句的写法存在SQL注入风险,建议使用mysqli的预处理语句参数绑定来实现查询,避免安全问题。

内容的提问来源于stack exchange,提问作者Ignacio Corball

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:48:02