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

标签 php apache unix memory mysqli

到处搜索,找不到这个问题的答案……除了“提高您的 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 行返回的内容(顺便说一句,这是正确的数据):

enter image description here

当我第一次运行这段代码时,出现了这个错误:

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

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

世界上有什么会导致它要求超过 4GB 的内存??知道如何摆脱它吗?

已添加以显示表格的“描述”:

enter image description here

最佳答案

This is a PHP bug.

您的选项(按优先顺序排列)是:

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

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

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

关于php - 当返回的数据小于10k时,什么会导致mysqli语句使用4GB内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29958513/

相关文章:

php - 追踪段错误 11 到大型 PHP 代码库

C + UNIX,siglongjmp 和 sigsetjmp

shell - 无法在 shell 脚本中获取属性文件

php - SQL错误插入到表中

apache - 如何让 trac 与 apache 一起运行?

php - 删除 &lt;script&gt; 标签 - PHP

Laravel Websockets Apache2 ReverseProxy 设置

linux - 当一个进程被杀死(*nix)时,系统调用的调用会发生什么?

php - 提交 HTML 表单后如何在页面刷新时停止重新提交表单

php - javascript循环数组中的奇数/偶数