当返回的数据小于10k时,什么会导致mysqli语句使用4GB内存?
What would cause a mysqli statement to use 4GB of memory when the returned data is less than 10k?
到处搜索,除了 "bump up your PHP memory usage limit" 之外,找不到这个问题的答案。在这种情况下,这没有任何意义。所以就这样..
这是一些代码(经过编辑以显示我之前放在这里的代码):
<?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 行 table。这是从这 20 行返回的内容(顺便说一句,这是正确的数据):
当我第一次运行这段代码时,出现了这个错误:
Fatal error: Allowed memory size of 805306368 bytes exhausted (tried to allocate 4294967296 bytes)
这发生在 "mysqli_stmt_bind_result..." 行。
世界上有什么会导致它要求超过 4GB 的内存??知道如何摆脱这个吗?
添加到显示 "DESCRIBE" 的 TABLE:
您的选项(按优先顺序排列)是:
将您的服务器升级到 PHP 5.4 或更高版本。 PHP 5.4 使用不同的 MySQL 接口库 (mysqlnd),它不受此错误的影响。
在mysqli_stmt_bind_result()
之前调用mysqli_stmt_store_result()
,这样PHP就会把整个结果集加载到内存中。但是,请注意,这将要求查询返回的所有数据立即加载到内存中,这可能会导致大型结果集出现问题。
将该列的类型从 LONGTEXT
更改为更短的类型。例如,MEDIUMTEXT
的最大大小为 16 MB,而不是 4 GB,因此它对内存使用的影响较小。
到处搜索,除了 "bump up your PHP memory usage limit" 之外,找不到这个问题的答案。在这种情况下,这没有任何意义。所以就这样..
这是一些代码(经过编辑以显示我之前放在这里的代码):
<?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 行 table。这是从这 20 行返回的内容(顺便说一句,这是正确的数据):
当我第一次运行这段代码时,出现了这个错误:
Fatal error: Allowed memory size of 805306368 bytes exhausted (tried to allocate 4294967296 bytes)
这发生在 "mysqli_stmt_bind_result..." 行。
世界上有什么会导致它要求超过 4GB 的内存??知道如何摆脱这个吗?
添加到显示 "DESCRIBE" 的 TABLE:
您的选项(按优先顺序排列)是:
将您的服务器升级到 PHP 5.4 或更高版本。 PHP 5.4 使用不同的 MySQL 接口库 (mysqlnd),它不受此错误的影响。
在
mysqli_stmt_bind_result()
之前调用mysqli_stmt_store_result()
,这样PHP就会把整个结果集加载到内存中。但是,请注意,这将要求查询返回的所有数据立即加载到内存中,这可能会导致大型结果集出现问题。将该列的类型从
LONGTEXT
更改为更短的类型。例如,MEDIUMTEXT
的最大大小为 16 MB,而不是 4 GB,因此它对内存使用的影响较小。