php - 使用 mysql php 构建 JSON 并嵌套 while 导致内存分配耗尽错误

标签 php mysql json while-loop nested-loops

我正在尝试使用以下数据库值中的代码构建嵌套的 json。这已经适用于较小的数据,但现在相同的代码出现了内存问题。错误是“允许的内存大小 268435456 字节已耗尽(尝试分配 4194312 字节)”

我尝试研究并强烈感觉到这是关于一些循环问题。有人可以帮忙吗?

{
$conn = mysqli_connect(dbhost, dbuser, dbpass, db);
  mysqli_set_charset($conn,"utf8");
  //$Article_Info= array();
  $article_array = array();
  $seller_array = array();
  $company_id = Get_Company();
  error_log($company_id);   

               $query_article = "SELECT B.SC_PRODUCT_NAME,A.SC_CUST_PROD_CODE, A.SC_ASIN_CD,A.SC_ARTICLE_ID,A.SC_COMPANY_ID,A.SC_PROD_GIVEN_NAME,A.SC_LAST_CHECKED,A.SC_LAST_UPDATED,A.SC_DEFAULT_SELLER,A.SC_BUY_BOX_SELLER,A.SC_CURRENCY,A.SC_LAST_PRICE,A.SC_CONV_PRICE,A.SC_NET_PRICE,A.SC_CONV_NET,A.SC_PRICE_INC,A.SC_PRICE_DEC,A.SC_COUNTRY_CODE,A.SC_DOMAIN,A.SC_AVAILABLE,A.SC_AVAIL_DESCR,A.SC_PRICE_TIME,A.SC_FAULT_FLAG,A.SC_FAULT_TIME,A.SC_FAULT_MSG FROM `SC_PRICE_HIST_TBL` A INNER JOIN `SC_PRODUCT_TBL` B ON A.SC_CUST_PROD_CODE = B.SC_CUST_PROD_CODE WHERE `SC_PRICE_HIST_STATUS` = '1' AND `SC_PRICE_HIST_INSERT` = '1' AND A.SC_COMPANY_ID = '$company_id' ORDER BY B.SC_PRODUCT_NAME,`SC_ARTICLE_ID`";
               //error_log($query_article);
              $result_article = mysqli_query($conn,$query_article);

              while ($row = mysqli_fetch_assoc($result_article))

              { 
                $query_seller = "SELECT `SC_SELLER_NAME`, `SC_SELLER_COUNT`, `SC_GROSS_PRICE`,`SC_NET_PRICE`, `SC_CONV_GROSS`, `SC_CONV_NET`, `SC_DELIVERY_PRICE`, `SC_CURRENCY`, `SC_LAST_UPDATED` FROM `SC_SELLER_TBL` WHERE `SC_SELLER_INSERT` = '1' AND SC_AMA_ASIN = '" .$row['SC_ASIN_CD']. "' AND SC_CUST_PROD_CODE = '" .$row['SC_CUST_PROD_CODE']. "' ORDER BY `SC_SELLER_NAME`";
                //error_log($query_seller);
                //echo $query_seller;
                $result_seller = mysqli_query($conn,$query_seller);

                while ($row1 = mysqli_fetch_assoc($result_seller))
                {
                  $seller_arr = array ("seller_name" =>$row1['SC_SELLER_NAME'],"gross_price_seller" =>$row1['SC_GROSS_PRICE'], "net_price_seller" =>$row1['SC_NET_PRICE'], "conv_gross_price_seller" =>$row1['SC_CONV_GROSS'], "conv_net_price_seller" =>$row1['SC_CONV_NET'], "delivery_price" =>$row1['SC_DELIVERY_PRICE'], "currency" =>$row1['SC_CURRENCY'], "last_updated" =>$row1['SC_LAST_UPDATED']);
                  array_push($seller_array, $seller_arr);
                }

                $Article_Info=array("product_name" => $row['SC_PRODUCT_NAME'],"product_code"=>$row['SC_CUST_PROD_CODE'],"ASIN"=>$row['SC_ASIN_CD'],"article_id"=>$row['SC_ARTICLE_ID'],"URL"=>$row['SC_DEFAULT_SELLER'],"default_seller"=>$row['SC_DEFAULT_SELLER'], "gross_price"=>$row['SC_LAST_PRICE'], "net_price"=>$row['SC_NET_PRICE'], "conv_gross_price"=>$row['SC_CONV_PRICE'], "conv_net_price"=>$row['SC_CONV_NET'], "currency"=>$row['SC_CURRENCY'], "domain"=>$row['SC_DOMAIN'], "country"=>$row['SC_COUNTRY_CODE'], "buy_box_seller"=>$row['SC_BUY_BOX_SELLER'], "total_num_seller"=>"5", "seller_info"=>$seller_array);
                array_push($article_array, $Article_Info);
              }
              $jsonDataEncoded1 = json_encode($article_array,JSON_UNESCAPED_UNICODE|JSON_INVALID_UTF8_IGNORE);
              echo $jsonDataEncoded1;
die();
}

最佳答案

您带来了大量数据,这导致 PHP 分配的内存多于分配给它的内存。

您可以通过更改 php.ini 配置或使用来增加此数字

ini_set('memory_limit', '512M');

作为 PHP 中的第一行

关于php - 使用 mysql php 构建 JSON 并嵌套 while 导致内存分配耗尽错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59527555/

相关文章:

php - 将内容保存到 mysql 数据库时出现撇号 "'“问题

php - Kohana 3 ORM 列表列

php - 数组声明

MySQL排除行

javascript - 如何使用值元素作为第二个元素的键?

wordpress 主题中的 PHP 短标签验证

mysql - 从另一个字段排序的数据库中选择不同的行

mysql - 如何使用 SQL 查询从字母数字中获取数值并按数字排序

python - 处理大的json文件

php - 使用 PHP 解析 Json 时遇到问题