【发布时间】:2019-01-03 12:58:32
【问题描述】:
我正面临一个根本不应该解决的问题,但不知何故我不能。这是场景:
我想从 SQL 语句中获取结果到 PHP 数组中,看起来很简单吧?
问题是它给了我关于 memory_limit 的错误(致命错误:内存不足(已分配 408944640)(试图分配 805306376 字节))。
这是我的代码,它使用的语句结果较少(我需要使用的语句包含 +/- 4000 条记录)。
$connect = @new mysqli($host, $db_user, $db_password, $db_name);
if($connect->connect_errno!=0)
{
echo "Error: ".$connect->connect_errno."Why: ". $connect->connect_error;
}
else{
$query = "SELECT meta_value, post_date
FROM
wp_postmeta
INNER JOIN
wp_posts
ON wp_posts.ID=wp_postmeta.post_id
where wp_posts.post_type ='shop_order' AND wp_postmeta.meta_key = '_order_total'";
$sql_query=mysqli_query($connect,$query);
if ($sql_query->num_rows > 0){
while(($row = mysqli_fetch_assoc($sql_query))!== false){
$result[] = $row;
}} else {
echo "0 results";
}
}
echo json_encode($result);
不太确定为什么它使用 0.8 GB 内存(对于一个简单的语句来说似乎已经足够了。但是为了尝试一下,我已将 php.ini 文件中的 memory_limit 更改为:memory_limit=8192M。但它根本没有帮助(检查 memory_limit 是否应用了调用 php_info() 函数)。
谢谢你们!
【问题讨论】:
-
不是语句,是数组
$result[]中存储的表中的数据 -
你真的需要
INNER JOIN吗? -
你的 mysqli_fetch_assoc 已经是一个数组了。那么为什么不回显它并跳过while循环
-
你真的同时需要这 4000 行吗?
-
你真正想要达到的目标是什么?这可能是XY problem