【问题标题】:While loop returns only first category and its productsWhile 循环仅返回第一个类别及其产品
【发布时间】:2016-12-08 15:04:46
【问题描述】:

数据库返回所有值。但是下面的while 循环只返回第一类及其产品。我想分别显示所有类别和产品。有人能在这段代码中找到问题吗?

elseif (isset($_GET['type']) && $_GET['type'] == 'getProducts') {
        $categoriesID = array();
        $categories = array();
        $category = array();
        $data = array();
        $current_category = '';

        while ($results = $query->fetch_assoc()) {

            if (!in_array($results['category_id'], $categoriesID)) {
                $categoriesID[] = $results['category_id'];

                $item = array();
                while ($resultdata = $query->fetch_assoc()) {

                    //IMAGE PATH
                    $store_id = $store_data['store_id'];
                    define('DIR_IMAGE', '../../image/uploads/' . $store_id . '/cache/');

    // RESIZE IMAGE
                    $extension_pos = strrpos($resultdata['product_image_url'], '.'); // find position of the last dot, so where the extension starts
                    $thumb = substr($resultdata['product_image_url'], 0, $extension_pos) . '-500x500' . substr($resultdata['product_image_url'], $extension_pos);
    // RESIZE IMAGE
    //IMAGE PATH
                    if ($resultdata['category_id'] == $results['category_id']) {

                        $items = array('id' => $resultdata['product_id'], 'name' => $resultdata['product_name'],
                            'price' => $resultdata['product_price'],
                            'link' => DIR_IMAGE . $thumb);
                        array_push($item, $items);
                    }
                }

                $categories[] = array('id' => $results['product_id'], 'cat_id' => $results['category_id'], 'category_name' => $results['category_name'],
                    'category_description' => '',
                    'data' => $item);
            }
        }
        echo json_encode($categories);

        //var_dump($categories);die;
    }

【问题讨论】:

    标签: php while-loop php-5.5


    【解决方案1】:

    在 while 循环中使用 fetchall,如下所示

     while ($results = $query->fetchAll()) {
    

    【讨论】:

      【解决方案2】:

      当我简化你的代码时,我得到:

      while ($results = $query->fetch_assoc()) {
           ...
           while ($resultdata = $query->fetch_assoc()) {
              ....
           }
      }
      

      很明显,外部while 循环只会运行一次,因为所有后续fetch_assoc()$query 的调用都将在内部循环中执行。

      【讨论】:

        猜你喜欢
        • 2017-11-09
        • 2023-03-16
        • 2018-07-11
        • 1970-01-01
        • 2017-11-22
        • 1970-01-01
        • 2020-11-11
        • 1970-01-01
        • 2012-03-16
        相关资源
        最近更新 更多