gpt4 book ai didi

php - 从 MySQL 获取大型数据集时 PHP 内存泄漏

转载 作者:可可西里 更新时间:2023-11-01 07:37:52 27 4
gpt4 key购买 nike

当我对大约有 60,000 条记录的用户表执行以下代码时:

mysql_connect("localhost", "root", "");
mysql_select_db("test");

$result = mysql_query("select * from users");

while ($row = mysql_fetch_object($result)) {
echo(convert(memory_get_usage(true))."\n");
}


function convert($size) {
$unit=array('b','kb','mb','gb','tb','pb');
return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
}

我收到以下错误:

PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes)

有没有想过如何避免脚本在每次循环时占用额外的内存?在我的实际代码中,我尝试为大型数据集提供 CSV 下载,并进行一些 PHP 预处理。

请不要建议增加 PHP 的内存限制——这是一个坏主意,更重要的是,它仍然会向上限制使用此技术可以处理的数据集的大小。

最佳答案

mysql_query将整个结果集缓冲到 php 内存中。这很方便,而且通常非常快,但您遇到了一个缺点。

mysql_unbuffered_query () 存在。它不会一次获取整个结果集。当您从结果集中获取行时,它会一次抓取一小部分。

关于php - 从 MySQL 获取大型数据集时 PHP 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8409171/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com