iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >如何解决PHP里大量数据循环时内存耗尽的问题
  • 499
分享到

如何解决PHP里大量数据循环时内存耗尽的问题

2023-06-17 06:06:02 499人浏览 八月长安
摘要

本篇文章为大家展示了如何解决PHP里大量数据循环时内存耗尽的问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。最近在开发一个php程序时遇到了下面的错误:PHP Fatal er

本篇文章为大家展示了如何解决PHP里大量数据循环时内存耗尽的问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

最近在开发一个php程序时遇到了下面的错误:

PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted

错误信息显示允许的***内存已经耗尽。遇到这样的错误起初让我很诧异,但转眼一想,也不奇怪,因为我正在开发的这个程序是要用一个foreach循环语句在一个有4万条记录的表里全表搜索具有特定特征的数据,也就是说,一次要把4万条数据取出,然后逐条检查每天数据。可想而知,4万条数据全部加载到内存中,内存不爆才怪。

如何解决PHP里大量数据循环时内存耗尽的问题

毕竟编程这么多年,我隐约记得PHP里提供有非一次全部加载数据的api,是像处理流媒体那样,随用随取随丢、数据并不会积累在内存的查询方法。经过简单的搜索,果然在官方网站上找到的正确的用法。

这个问题在PHP的官方网站上叫缓冲查询和非缓冲查询(Buffered and Unbuffered queries)。 PHP的查询缺省模式是缓冲模式。也就是说,查询数据结果会一次全部提取到内存里供PHP程序处理。这样给了PHP程序额外的功能,比如说,计算行数,将 指针指向某一行等。更重要的是程序可以对数据集反复进行二次查询和过滤等操作。但这种缓冲查询模式的缺陷就是消耗内存,也就是用空间换速度。

相对的,另外一种PHP查询模式是非缓冲查询,数据库服务器会一条一条的返回数据,而不是一次全部返回,这样的结果就是PHP程序消耗较少的内存,但却增加了数据库服务器的压力,因为数据库会一直等待PHP来取数据,一直到数据全部取完。

很显然,缓冲查询模式适用于小数据量查询,而非缓冲查询适应于大数据量查询。

对于PHP的缓冲模式查询大家都知道,下面列举的例子是如何执行非缓冲查询API。

非缓冲查询方法一: mysqli

<?php $Mysqli  = new mysqli("localhost", "my_user", "my_passWord", "world"); $uresult = $mysqli->query("SELECT Name FROM City", MYSQLI_USE_RESULT);  if ($uresult) {    while ($row = $uresult->fetch_assoc()) {        echo $row['Name'] . PHP_EOL;    } } $uresult->close(); ?>

非缓冲查询方法二: pdo_mysql

<?php $pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_pass'); $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);  $uresult = $pdo->query("SELECT Name FROM City"); if ($uresult) {    while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) {        echo $row['Name'] . PHP_EOL;    } } ?>

非缓冲查询方法三: mysql

<?php $conn = mysql_connect("localhost", "my_user", "my_pass"); $db   = mysql_select_db("world");  $uresult = mysql_unbuffered_query("SELECT Name FROM City"); if ($uresult) {    while ($row = mysql_fetch_assoc($uresult)) {        echo $row['Name'] . PHP_EOL;    } } ?>

上述内容就是如何解决PHP里大量数据循环时内存耗尽的问题,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网PHP编程频道。

--结束END--

本文标题: 如何解决PHP里大量数据循环时内存耗尽的问题

本文链接: https://www.lsjlt.com/news/287480.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何解决PHP里大量数据循环时内存耗尽的问题
    本篇文章为大家展示了如何解决PHP里大量数据循环时内存耗尽的问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。最近在开发一个PHP程序时遇到了下面的错误:PHP Fatal er...
    99+
    2023-06-17
  • Excel数据导入Mysql常见问题汇总:如何解决导入大量数据时内存溢出的问题?
    Excel数据导入Mysql常见问题汇总:如何解决导入大量数据时内存溢出的问题?导入Excel数据到Mysql数据库是一个常见而重要的任务,在处理大量数据时,有时会遇到内存溢出的问题。本文将介绍一些解决这一问题的方法。拆分数据:如果Exce...
    99+
    2023-10-22
    Excel MySQL 内存溢出 解决问题 导入
  • 如何解决使用@ManyToMany查询数据时的死循环问题
    本篇内容主要讲解“如何解决使用@ManyToMany查询数据时的死循环问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决使用@ManyToMany查询数据时的死循环问题”吧!使用@Man...
    99+
    2023-06-21
  • 使用Python循环读取数据时内存不足如何解决
    使用Python循环读取数据时内存不足如何解决?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.read()与readlines():随手搜索python读写文件的教程,很...
    99+
    2023-06-15
  • 如何处理大量数据的内存泄漏问题?
    随着数据量不断增大,数据分析和处理也变得越来越复杂。在大规模数据处理的过程中,内存泄漏是很常见的问题之一。如果不正确地处理,内存泄漏不仅会导致程序崩溃,还会对性能和稳定性产生严重影响。本文将介绍如何处理大量数据的内存泄漏问题。了解内存泄漏的...
    99+
    2023-05-14
    数据处理 内存管理 泄漏检测
  • 如何解决win8系统进程占据大量内存问题
    这篇文章将为大家详细讲解有关如何解决win8系统进程占据大量内存问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先右击此电脑,并直接打开“管理”。按序点击打开:“服务和应用程序-服务”,直接找到“Su...
    99+
    2023-06-27
  • 解决使用@ManyToMany查询数据时的死循环问题
    目录使用@ManyToMany查询数据时的死循环一、在Role中加上@JsonIgnore注解二、将双向关联改为单向关联单向多对多@ManyToMany的使用和理解使用@ManyTo...
    99+
    2024-04-02
  • java导出大量数据内存溢出如何解决
    在处理大量数据时,可能会遇到内存溢出的问题。以下是一些解决方法:1. 使用合适的数据结构:确保选择适合处理大量数据的数据结构。例如,...
    99+
    2023-08-20
    java
  • 如何解决HashMap并发时会引起死循环的问题
    这篇文章给大家分享的是有关如何解决HashMap并发时会引起死循环的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。今天研读Java并发容器和框架时,看到为什么要使用ConcurrentHashMap时,其中有...
    99+
    2023-06-15
  • 如何解决Mysql大量数据导入遇到的问题
    这篇文章主要介绍如何解决Mysql大量数据导入遇到的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在项目中,经常会碰到往数据库中导入大量数据,以便利用sql进行数据分析。在导入数...
    99+
    2024-04-02
  • 详解如何解决使用JSON.stringify时遇到的循环引用问题
    程序员在日常做TypeScript/JavaScript开发时,经常需要将复杂的JavaScript对象通过JSON.stringify序列化成json字符串,保存到本地以便后续具体...
    99+
    2024-04-02
  • 如何解决PHP开发中的内存溢出问题
    随着PHP的应用越来越广泛,PHP开发中的内存溢出问题也成为了开发者们共同面临的挑战。内存溢出是指程序在运行过程中申请的内存超过了内存空间的限制,导致程序出现异常或崩溃的情况。本文将介绍如何解决PHP开发中的内存溢出问题,并提供一些具体的代...
    99+
    2023-10-21
    解决方法 内存溢出
  • 如何解决PHP开发中的内存泄漏问题
    导语:内存泄漏是指程序执行时无法释放已经分配的内存,导致内存占用不断增加,最终导致程序崩溃。在PHP开发中,内存泄漏是一个普遍存在的问题。本文将介绍如何解决PHP开发中的内存泄漏问题,并提供具体的代码示例。一、使用unset()函数手动释放...
    99+
    2023-10-21
    内存泄漏 解决方法 PHP开发
  • Excel数据导入Mysql常见问题汇总:如何解决导入数据时遇到的大批量插入问题?
    Excel数据导入Mysql常见问题汇总:如何解决导入数据时遇到的大批量插入问题?导入Excel数据到MySQL是日常开发中经常遇到的任务之一。对于少量数据的导入,可以使用数据库客户端工具或者命令行进行插入操作。但当面对大批量数据导入时,简...
    99+
    2023-10-22
    数据导入 批量插入 Mysql问题解决
  • 如何解决MySQL数据量增大之后翻页慢的问题
    本篇文章为大家展示了如何解决MySQL数据量增大之后翻页慢的问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。MySQL最易碰到的性能问题就是数据量逐步增大之后的翻...
    99+
    2024-04-02
  • 如何使用Python解决大数据存储和分析问题?
    随着互联网的不断发展,数据量也在不断增长。对于数据科学家和分析师来说,处理大量数据已经成为日常工作。Python作为一种高效且易学的编程语言,成为了大数据存储和分析的首选工具。本文将介绍如何使用Python解决大数据存储和分析问题。 一、...
    99+
    2023-10-28
    http 大数据 自然语言处理
  • PHP和Linux:解决大规模数据存储和处理的问题。
    PHP和Linux:解决大规模数据存储和处理的问题 在现代社会中,数据存储和处理已成为企业的核心任务之一。对于大规模数据的存储和处理,PHP和Linux是两个强大的工具,它们可以帮助企业轻松地管理海量数据。在本文中,我们将探讨如何使用PHP...
    99+
    2023-10-11
    linux 存储 大数据
  • MySQL中如何通过循环检测并解决数据完整性问题
    在MySQL中,可以通过使用存储过程来循环检测并解决数据完整性问题。以下是一个简单的示例,演示了如何使用存储过程来检测并解决某个表中...
    99+
    2024-04-30
    MySQL
  • 如何解决Mysql导入大容量SQL文件数据问题
    这篇文章主要介绍了如何解决Mysql导入大容量SQL文件数据问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。mysql在通过导入sql文件...
    99+
    2024-04-02
  • 如何解决Redis内存数据满了导致宕机问题
    这篇文章主要讲解了“如何解决Redis内存数据满了导致宕机问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何解决Redis内存数据满了导致宕机问题”吧!...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作