php中mysql操作buffer用法详解


Posted in PHP onMarch 19, 2015

本文实例讲述了php中mysql操作buffer用法。分享给大家供大家参考。具体分析如下:

php与mysql的连接有三种方式,mysql,mysqli,pdo。不管使用哪种方式进行连接,都有使用buffer和不使用buffer的区别。

什么叫使用buffer和不使用buffer呢?

客户端与mysql服务端进行查询操作,查询操作的时候如果获取的数据量比较大,那个这个查询结果放在哪里呢?

有两个地方可以放:客户端的缓冲区和服务端的缓冲区。

我们这里说的buffer指的是客户端的缓冲区,如果查询结果已经从服务端获取回来了,放置在了客户端的缓冲区,我们就称之为使用buffer。如果还是存放在服务端的缓冲区的话,我们就说没有使用buffer(unbuffer)。

使用buffer和不使用buffer有什么区别?

主要在内存方面,使用buffer会增加客户端的内存压力,当返回的数据结果特别大的时候可能会占用调用客户端(实际就是一个php进程)比较大的进程。不使用buffer自然对服务端(这里说的是提供mysql服务的服务器)压力更大。

具体可以参考:PHP查询MySQL大量数据的内存占用分析

php中三种模式是如何设置是否使用buffer的?

mysql默认的query是使用buffer的,而不使用buffer就需要使用mysql_unbuffer_query

mysqli默认的query是不使用buffer的,要使用buffer就需要设置MYSQLI_STORE_RESULT

pdo默认的quey是不使用buffer的,要使用buffer就需要设置MYSQL_ATTR_USE_BUFFERED_QUERY

大致相关代码如下:

<?php
$dbConfig = array(
  'host' => '10.128.11.101',
  'port' => '3306',
  'user' => 'test',
  'pass' => 'test',
  'db' => 'test',
);
$sql = 'select * from so_topic_app';
//---------mysql----------//
$db = mysql_connect($dbConfig['host'], $dbConfig['user'], $dbConfig['pass']);
mysql_select_db($dbConfig['db'], $db);
mysql_set_charset('utf8', $db);
// mysql使用buffer
$res = mysql_query($sql, $db);
$data = array();
while($row = mysql_fetch_row($res)) {
  $data[] = $row;
}
// mysql不使用buffer
$res = mysql_unbuffered_query($sql, $db);
$data = array();
while($row = mysql_fetch_row($res)) {
  $data[] = $row;
}
mysql_close($db);
//---------mysqli----------//
$db = mysqli_connect($dbConfig['host'], $dbConfig['user'], $dbConfig['pass'], $dbConfig['db']);
// mysqli不使用buffer
$result = mysqli_query($db, $sql);
$data = array();
while($row = $result->fetch_array()) {
  $data[] = $row;
}
// mysqli使用buffer
$result = mysqli_query($db, $sql, MYSQLI_STORE_RESULT);
$data = array();
while($row = $result->fetch_array()) {
  $data[] = $row;
}
mysqli_free_result($result);
mysqli_close($db);
//---------pdo----------//
$dsn = "mysql:dbname={$dbConfig['db']};host={$dbConfig['host']}";
$pdo = new PDO($dsn, $dbConfig['user'], $dbConfig['pass']);
// pdo不使用buffer
$stmt = $pdo->prepare($sql);
$stmt->execute();
$data = array();
$data = $stmt->fetchAll();
// pdo使用buffer
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
$stmt = $pdo->prepare($sql);
$stmt->execute();
$data = array();
$data = $stmt->fetchAll();

后续

当然如果数据量非常大的话,大部分人还是会考虑使用分批次来提取和处理数据。所以实际上需要我们关注和使用mysql是使用buffer还是不使用buffer的场景非常少。

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
adodb与adodb_lite之比较
Dec 31 PHP
采集邮箱的php代码(抓取网页中的邮箱地址)
Jul 17 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
Sep 16 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
Nov 05 PHP
php自定义urlencode,urldecode函数实例
Mar 24 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
Apr 21 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
Mar 17 PHP
使用php实现从身份证中提取生日
May 09 PHP
利用PHP生成CSV文件简单示例
Dec 21 PHP
PHP receiveMail实现收邮件功能
Apr 25 PHP
php新建文件的方法实例
Sep 26 PHP
Laravel 实现添加多语言提示信息
Oct 25 PHP
PHP经典面试题集锦
Mar 19 #PHP
PHP将进程作为守护进程的方法
Mar 19 #PHP
PHP的pcntl多进程用法实例
Mar 19 #PHP
php安装swoole扩展的方法
Mar 19 #PHP
php清除和销毁session的方法分析
Mar 19 #PHP
Codeigniter发送邮件的方法
Mar 19 #PHP
Codeigniter实现发送带附件的邮件
Mar 19 #PHP
You might like
在线短消息收发的程序,不用数据库
2006/10/09 PHP
发布一个迷你php+AJAX聊天程序[聊天室]提供下载
2007/07/21 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
2013/09/30 PHP
PHP实现数字补零功能的2个函数介绍
2014/05/12 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
PHP实现简易blog的制作
2016/10/24 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
JavaScript中setInterval的用法总结
2013/11/20 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
老生常谈javascript的类型转换
2016/10/12 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
详解react native页面间传递数据的几种方式
2018/11/07 Javascript
jQuery实现合并表格单元格中相同行操作示例
2019/01/28 jQuery
深入理解vue-class-component源码阅读
2019/02/18 Javascript
react 中父组件与子组件双向绑定问题
2019/05/20 Javascript
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
2013/12/04 Python
django接入新浪微博OAuth的方法
2015/06/29 Python
python 处理dataframe中的时间字段方法
2018/04/10 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
html5文本内容_动力节点Java学院整理
2017/07/11 HTML / CSS
html5的pushstate以及监听浏览器返回事件的实现
2020/08/11 HTML / CSS
英国一家集合了众多有才华设计师品牌的奢侈店:Wolf & Badger
2018/04/18 全球购物
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
WebSphere 应用服务器都支持哪些认证
2013/12/26 面试题
质检部部长职责
2013/12/16 职场文书
抄作业检讨书
2014/02/17 职场文书
美术教师岗位职责
2014/03/18 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
基于python定位棋子位置及识别棋子颜色
2021/07/26 Python
PostgreSQL解析URL的方法
2021/08/02 PostgreSQL
关于@OnetoMany关系映射的排序问题,使用注解@OrderBy
2021/12/06 Java/Android
德劲DE1102数字调谐收音机机评
2022/04/07 无线电