我正在尝试使用以下数据库值中的代码构建嵌套的 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/