全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

PHP的中使用非缓冲模式查询数据库的方法

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

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

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

毕竟编程这么多年,我隐约记得PHP里提供有非一次全部加载数据的API,是像处理流媒体那样,随用随取随丢、数据并不会积累在内存的查询方法。经过简单的搜索,果然在官方网站上找到的正确的用法。缓冲查询和非缓冲查询(Buffered and Unbuffered queries)。PHP的查询缺省模式是缓冲模式。也就是说,查询数据结果会一次全部提取到内存里供PHP程序处理。这样给了PHP程序额外的功能,比如说,计算行数,将指针指向某一行等。更重要的是程序可以对数据集反复进行二次查询和过滤等操作。但这种缓冲查询模式的缺陷就是消耗内存。

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

非缓冲查询方法一: 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;
  }
}

注:引之 http://www.webhek.com/php-buffered-and-unbuffered-queries

手册资料 http://php.net/manual/zh/mysqlinfo.concepts.buffering.php


# PHP非缓冲模式  # PHP中数据库单例模式的实现代码分享  # php设计模式 DAO(数据访问对象模式)  # 浅析php设计模式之数据对象映射模式  # PHP基于单例模式实现的数据库操作基类  # PHP实现的数据对象映射模式详解  # PHP单例模式应用示例【多次连接数据库只实例化一次】  # PHP单例模式数据库连接类与页面静态化实现方法  # PHP数据对象映射模式实例分析  # PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析  # PHP数据源架构模式之表入口模式实例分析  # 的是  # 也就是说  # 加载  # 也不  # 我很  # 要把  # 给了  # 要用  # 但却  # 更重要  # 官方网  # 站上  # 流媒体  # 较少  # 错误信息  # 可想而知  # 才怪  # 而不是  # 增加了  # 行数 


相关文章: SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  建站主机如何安装配置?新手必看操作指南  如何在景安服务器上快速搭建个人网站?  如何用IIS7快速搭建并优化网站站点?  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  如何配置支付宝与微信支付功能?  香港网站服务器数量如何影响SEO优化效果?  如何在阿里云域名上完成建站全流程?  如何基于云服务器快速搭建网站及云盘系统?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  ,怎么在广州志愿者网站注册?  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  网站制作报价单模板图片,小松挖机官方网站报价?  seo网站制作优化,网站SEO优化步骤有哪些?  建站之星价格显示格式升级,你的预算足够吗?  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  宝塔建站无法访问?如何排查配置与端口问题?  如何通过西部建站助手安装IIS服务器?  如何用低价快速搭建高质量网站?  ,想在网上投简历,哪几个网站比较好?  *服务器网站为何频现安全漏洞?  如何在建站之星绑定自定义域名?  如何用景安虚拟主机手机版绑定域名建站?  如何获取免费开源的自助建站系统源码?  教学论文网站制作软件有哪些,写论文用什么软件 ?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  制作网站怎么制作,*游戏网站怎么搭建?  如何在VPS电脑上快速搭建网站?  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  图册素材网站设计制作软件,图册的导出方式有几种?  c# 在ASP.NET Core中管理和取消后台任务  SQL查询语句优化的实用方法总结  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  建站之星下载版如何获取与安装?  如何快速搭建响应式可视化网站?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  小型网站制作HTML,*游戏网站怎么搭建?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  如何通过PHP快速构建高效问答网站功能?  如何高效配置IIS服务器搭建网站?  建站168自助建站系统:快速模板定制与SEO优化指南  定制建站是什么?如何实现个性化需求?  中山网站制作网页,中山新生登记系统登记流程?  如何在IIS中配置站点IP、端口及主机头?  公司网站的制作公司,企业网站制作基本流程有哪些?  如何制作网站标识牌,动态网站如何制作(教程)?  头像制作网站在线制作软件,dw网页背景图像怎么设置? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。