到处搜索,找不到这个问题的答案……除了“提高您的 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 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/