PHP查询大量数据内存耗尽问题的解决方法


Posted in PHP onOctober 28, 2016

从数据库查询大量数据时会出现内容不够的提示

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

这个问题在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中json_encode、json_decode与serialize、unserialize的性能测试分析
Jun 09 PHP
用PHP实现Ftp用户的在线管理
Feb 16 PHP
php mysql_real_escape_string函数用法与实例教程
Sep 30 PHP
PHP中preg_match函数正则匹配的字符串长度问题
May 27 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
Mar 21 PHP
PHP ADODB实现事务处理功能示例
May 25 PHP
Thinkphp 5.0实现微信企业付款到零钱
Sep 30 PHP
PHP简单验证码功能机制实例详解
Mar 27 PHP
PHP大文件切割上传并带进度条功能示例
Jul 01 PHP
Yii Framework框架使用PHPExcel组件的方法示例
Jul 24 PHP
php装饰者模式简单应用案例分析
Oct 23 PHP
TP5框架页面跳转样式操作示例
Apr 05 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
Oct 28 #PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
Oct 28 #PHP
PHP图像识别技术原理与实现
Oct 27 #PHP
PHP对称加密函数实现数据的加密解密
Oct 27 #PHP
PHP下的浮点运算不准的解决方法
Oct 27 #PHP
php函数mkdir实现递归创建层级目录
Oct 27 #PHP
PHP实现递归目录的5种方法
Oct 27 #PHP
You might like
建立动态的WML站点(一)
2006/10/09 PHP
E路文章系统PHP
2006/12/11 PHP
php foreach 参数强制类型转换的问题
2010/12/10 PHP
PHP CURL获取cookies模拟登录的方法
2013/11/04 PHP
解决php接收shell返回的结果中文乱码问题
2014/01/23 PHP
一张表搞清楚php is_null、empty、isset的区别
2015/07/07 PHP
用javascript实现无刷新更新数据的详细步骤 asp
2006/12/26 Javascript
Knockoutjs快速入门(经典)
2012/12/24 Javascript
浅析Cookie中的Path与domain
2013/12/18 Javascript
jQuery控制TR显示隐藏的几种方法
2014/06/18 Javascript
javascript背景时钟实现方法
2015/06/18 Javascript
jQuery超赞的评分插件(8款)
2015/08/20 Javascript
跟我学习javascript的this关键字
2020/05/28 Javascript
关于angularJs指令的Scope(作用域)介绍
2016/10/25 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
微信运维交互机器人的示例代码
2018/11/12 Javascript
微信小程序云开发使用方法新手初体验
2019/05/16 Javascript
玩转python爬虫之爬取糗事百科段子
2016/02/17 Python
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
Python中shutil模块的常用文件操作函数用法示例
2016/07/05 Python
浅谈机器学习需要的了解的十大算法
2017/12/15 Python
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
python自动化测试之DDT数据驱动的实现代码
2019/07/23 Python
python制作朋友圈九宫格图片
2019/11/03 Python
python实现智能语音天气预报
2019/12/02 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
让IE9以下版本的浏览器兼容HTML5的方法
2014/03/12 HTML / CSS
Html5在手机端调用相机的方法实现
2020/05/13 HTML / CSS
大学校园毕业自我鉴定
2014/01/15 职场文书
麦当劳辞职信范文
2014/01/18 职场文书
销售活动策划方案
2014/08/26 职场文书
2015年项目工作总结
2015/04/29 职场文书
婚庆答谢词大全
2015/09/29 职场文书
Python 内置函数速查表一览
2021/06/02 Python
redis数据结构之压缩列表
2022/03/21 Redis