概述:
之前写过一篇文章叫PHP百万级数据导出方案(多csv文件压缩),发现很多朋友都很感兴趣,但是当时用的方法比较不方便,可能不太符合很多人的需求。后来想了一下如何优化时,了解到能用生成器来处理内存溢出更方便,所以当时文章中也补充分享了一下这想法。然而,发现更多朋友对如何结合生成器导出数据感兴趣,因此这篇文章,我来填下坑。
准备:
1、了解生成器yield
我上篇文章PHP百万级数据导出方案(多csv文件压缩) 说了几个坑,大家可以先去回顾一下。然后我们可以看一下前辈的对生成器介绍的文章: PHP性能优化利器:生成器 yield理解,来理解一下生成器防止内存溢出的原理。
2、解决数据查询内存溢出
了解完生成器yield原理之后,我们还需要解决一个问题,我们常用的mysql查询函数是mysqli_query(connection,query,resultmode);,通常都是直接填写第一第二个参数就直接查询,但该函数默认的是对全部结果集进行缓存,这会导致数据过多的时候,内存也会溢出。因此,我们需要设置第三个参数为MYSQLI_USE_RESULT来逐行读取结果集。那或许您有疑问为什么不直接 遍历该mysqli_query()方法返回的结果来当每一行数据写到CSV中,而还要用yield来存储一次每行数据再

本文介绍了使用PHP生成器yield解决百万级数据导出时的内存溢出问题。通过设置MYSQLI_USE_RESULT参数逐行读取数据库结果,并利用yield将数据转化为数组,供fputcsv写入CSV文件。文中提供了代码示例,适用于单个或多个CSV文件导出,并建议打包成压缩文件。
最低0.47元/天 解锁文章
1283

被折叠的 条评论
为什么被折叠?



