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

CodeIgniter 3分页失效求助:批量向API发送库存数据

问题排查与修复:CodeIgniter 3 分页失效问题

核心错误点

你的分页功能失效主要源于以下几个问题:

  • 总数统计错误:使用count_all('ci_products')会统计整个表的行数,忽略了你之前设置的where条件(用户ID、激活状态等),导致分页计算完全错误。
  • 未应用分页参数:查询产品数据时没有添加limit和offset限制,每次循环都获取全部符合条件的产品,完全没实现分页逻辑。
  • 输出逻辑位置错误:JSON生成和输出的代码放在了分页循环的外面,只会处理最后一次循环的结果(而因为每次都查全量数据,最终结果还是全部产品)。

修复后的完整代码

public function sendstocktobl()
{
    if ($_SERVER['REMOTE_ADDR'] !== $this->localhost) {
        echo $_SERVER['REMOTE_ADDR'];
    } else {
        $this->load->database();

        $url = get_integration_url('baselinker');
        $this->db->select('user_id');
        $this->db->where('bl_send_stock', 1);
        $this->db->where('is_baselinker', 1);
        $this->db->where('is_active', 1);
        $resArr = $this->db->get('ci_users')->result_array();

        foreach ($resArr as $row) {
            $user_id = $row['user_id'];
            $limit = 1000;
            $offset = 0;
            $where = "quantity is NOT NULL";

            // 正确统计当前用户符合条件的产品总数
            $this->db->where($where);
            $this->db->where('is_active', 1);
            $this->db->where('user_id', $user_id);
            $total_results = $this->db->count_all_results('ci_products');
            $total_pages = ceil($total_results / $limit);

            $token = get_bl_token($user_id);
            $inventoryid = get_bl_inventory($user_id);
            $blwh = get_bl_warehouse($user_id);

            for ($page = 1; $page <= $total_pages; $page++) {
                $arr = [
                    "inventory_id" => $inventoryid,
                    "products" => [],
                ];

                // 查询当前页的产品数据,添加limit和offset实现分页
                $this->db->select('*');
                $this->db->where($where);
                $this->db->where('is_active', 1);
                $this->db->where('user_id', $user_id);
                $this->db->limit($limit, $offset);
                $prodArr = $this->db->get('ci_products')->result_array();

                foreach ($prodArr as $prod) {
                    $arr['products'][$prod['id']] = [$blwh => $prod['quantity']];
                }

                // 每一页生成JSON后立即处理(输出或发送API)
                $preparebl = json_encode($arr);
                echo $preparebl;
                // 这里可以添加发送API的逻辑,比如用curl请求$url
                // $this->send_to_baselinker_api($url, $preparebl, $token);

                // 更新offset,准备下一页数据查询
                $offset += $limit;
            }
        }
    }
}

关键修复说明

  1. 修正总数统计:将count_all('ci_products')替换为count_all_results('ci_products'),该方法会保留之前设置的where条件,准确统计当前用户符合要求的产品数量。
  2. 添加分页参数:在产品查询中加入$this->db->limit($limit, $offset),确保每次只获取当前页的1000条数据。
  3. 调整输出位置:将JSON生成和输出(或API发送)的代码移到分页循环内部,让每一页数据都能被单独处理。
  4. 正确更新offset:每次循环后更新$offset,确保下一页能获取到正确的数据区间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:56:09