繁体   English   中英

当返回的数据小于10k时,什么会导致mysqli语句使用4GB的内存?

[英]What would cause a mysqli statement to use 4GB of memory when the returned data is less than 10k?

搜索高低,并找不到这个答案..除了“提高你的PHP内存使用限制”,这在这种情况下毫无意义。 所以这里..

这是一些代码(编辑以显示我之前在此处放置的代码):

<?php
define('DB_NAME', "XXXXXX");
define('DB_USER', "XXXXXX");
define('DB_PASS', "XXXXXX");
define('DB_SERVER', "cloud1.XXXXXXXX.com");

// Create connection info
global $dbLink;
$dbLink= mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME) ;

/*------------------------- Retreiving columns names --------------*/

$event_stmt1 = mysqli_prepare($dbLink,"select form_id,display_meta from wp_rg_form_meta order by form_id asc");
mysqli_stmt_execute($event_stmt1);
mysqli_stmt_bind_result($event_stmt1, $id, $display_meta);

这个数据库表中有20行。 以下是从这20行返回的内容(顺便提一下,这是正确的数据):

在此输入图像描述

当我第一次运行此代码时,出现此错误:

Fatal error: Allowed memory size of 805306368 bytes exhausted (tried to allocate 4294967296 bytes)

这发生在“mysqli_stmt_bind_result ...”行。

世界上会有什么东西要求超过4GB的内存? 任何想法如何摆脱这个?

添加到显示表的“描述”:

在此输入图像描述

这是一个PHP错误。

您的选择按优先顺序排列:

  • 将服务器升级到PHP 5.4或更高版本。 PHP 5.4使用不受此bug影响的不同MySQL接口库(mysqlnd)。

  • 呼叫mysqli_stmt_store_result()之前mysqli_stmt_bind_result()使PHP将加载整个结果集到内存中。 但请注意,这将要求查询返回的所有数据一次加载到内存中,这可能会导致大型结果集出现问题。

  • 将该列的类型从LONGTEXT更改为较短的类型。 例如, MEDIUMTEXT的最大大小为16 MB,而不是4 GB,因此它对内存使用的影响较小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM