使用PDO和MySQLi的游标功能可实现数据库大数据量下的低内存逐行处理。首先通过PDO设置PDO::MYSQL_ATTR_USE_BUFFERED_QUERY为false,结合fetch()方法逐行读取;或使用MySQLi的query()配合MYSQLI_USE_RESULT模式执行未缓冲查询,再用fetch_assoc()循环获取数据,并需调用free_result()释放资源;进一步结合PHP生成器,封装游标查询为Generator对象,利用yield逐次返回单行数据,使内存占用保持在较低水平,适用于大规模数据流式处理场景。

当您需要从数据库中读取大量数据并逐行处理时,直接加载全部结果集可能导致内存溢出。使用游标可以有效降低内存消耗,实现高效的数据流式处理。以下是PHP中利用游标逐行处理数据库数据的方法。
本文运行环境:MacBook Pro,macOS Sonoma
PDO提供了对游标的原生支持,通过设置语句的获取模式为游标类型,可实现逐行读取数据。
1、创建PDO连接,并禁用预取以启用服务器端游标。
立即学习“PHP免费学习笔记(深入)”;
将PDO::MYSQL_ATTR_USE_BUFFERED_QUERY属性设为false,确保查询不缓存全部结果。
2、执行SELECT语句后,使用while循环配合fetch()方法逐行获取记录。
3、每处理完一行数据后,自动释放当前行资源,避免内存累积。
MySQLi扩展允许执行未缓冲查询,使得结果集在客户端不被完整存储,适合大数据量场景。
1、建立MySQLi连接后,调用query()方法并传入第二个参数MYSQLI_USE_RESULT以启动未缓冲模式。
2、使用fetch_assoc()或fetch_array()方法循环读取每一行数据。
3、必须在处理完毕后调用free_result()显式释放结果集资源。
PHP的生成器能将游标封装成可遍历对象,在保持低内存占用的同时提供简洁的语法结构。
1、定义一个返回Generator类型的方法,内部使用PDO或MySQLi进行未缓冲查询。
2、在循环中每次yield返回单行数据,外部可通过foreach消费该生成器。
3、生成器函数会在每次yield后暂停执行,直到下一次迭代请求,极大减少内存压力。
以上就是php数据库游标使用教程_php数据库逐行处理数据方法的详细内容,更多请关注php中文网其它相关文章!
 
                        
                        PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
 
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号