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

为什么PHP处理SQL结果生成的$skus数组会缺失最后一项?

问题根因

你的代码仅在两种场景下会将组装完成的SKU数据推入结果数组$skus:

  • 遍历数据库记录时,检测到当前记录的父ID与上一组父ID不一致,将上一组完整数据推入数组
  • 遍历结束后,仅当总记录数等于1时,才将最后一组数据推入数组

当查询结果总记录数大于1时,最后一组记录遍历完成后没有下一条不同父ID的记录触发推入逻辑,同时也不满足总记录数=1的判定条件,最后一组数据就会被遗漏,这就是你缺失最后一条记录的原因。

修正方案

将遍历结束后的判定逻辑修改为:只要存在有效查询记录,就将最后一组组装好的SKU数据推入结果数组即可。
修正后的完整代码如下:

case 'skuLookup':
    $sql = "SELECT i.id, i.sku as parentSku, i.description as parentDescription, sku.item_sku as sku, sku.description FROM sku LEFT JOIN sku_vendor_pivot AS vp ON sku.id = vp.sku_vendor_fk LEFT JOIN sku_internal AS i ON i.id = vp.sku_fk WHERE i.sku LIKE '" . $dbh->escape($call['id']) . "%' AND i.id is not null";
    $sql .= " UNION ";
    $sql .= "SELECT i.id, i.sku as parentSku, i.description as parentDescription, sku.item_sku as sku, sku.description FROM sku LEFT JOIN sku_vendor_pivot AS vp ON sku.id = vp.sku_vendor_fk LEFT JOIN sku_internal AS i ON i.id = vp.sku_fk WHERE sku.item_sku LIKE '" . $dbh->escape($call['id']) . "%' AND i.id is not null";
    if(is_numeric($call['id'])) {
        $sql = "SELECT i.id, i.sku as parentSku, i.description as parentDescription, sku.item_sku as sku, sku.description FROM sku LEFT JOIN sku_vendor_pivot AS vp ON sku.id = vp.sku_vendor_fk LEFT JOIN sku_internal AS i ON i.id = vp.sku_fk WHERE i.id = " . $dbh->escape($call['id']) . " AND i.id is not null";
    }
    $skus = array();
    if($dbh->query($sql)) {
        $parent = null;
        $children = array();
        $count = 0;
        while($dbh->next_record()) {
            $count++;
            if($parent == null) {
                $parent = $dbh->Record['id'];
            }

            if($parent != $dbh->Record['id']) {
                $sku['children'] = $children;
                $skus[] = $sku;

                $parent = $dbh->Record['id'];
                $children = array();
            }
            $sku = array(
                    'description' => $dbh->Record['parentDescription'],
                    'value' => $dbh->Record['parentSku'],
            );
            $children[] = $dbh->Record['sku'] . " - " . $dbh->Record['description'];
        }
        // 仅修改此处判定逻辑,移除count==1的限制
        if($count > 0) {
            $sku['children'] = $children;
            $skus[] = $sku;
        }
    }
    $newData['skuLookup']['data'] = $skus;
    error_log("newData['skuLookup']['data'] data:\n" . print_r($newData['skuLookup']['data'], TRUE));
    $data = array_merge($data,$newData);
    break;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:54:03