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 相关文章推荐
PHP中利用substr_replace将指定两位置之间的字符替换为*号
Jan 27 PHP
thinkphp3.0 模板中函数的使用
Nov 13 PHP
php实现的替换敏感字符串类实例
Sep 22 PHP
php curl登陆qq后获取用户信息时证书错误
Feb 03 PHP
Laravel 5框架学习之Eloquent (laravel 的ORM)
Apr 08 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
Apr 21 PHP
php获取'/'传参的值简单方法
Jul 13 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
php实现支持中文的文件下载功能示例
Aug 30 PHP
PHP大文件分片上传的实现方法
Oct 28 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
Dec 07 PHP
php实例化一个类的具体方法
Sep 19 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
php session和cookie使用说明
2010/04/07 PHP
PHP安全配置详细说明
2011/09/26 PHP
PHP中类的继承和用法实例分析
2016/05/24 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
2017/03/25 PHP
PHP大文件分块上传功能实例详解
2019/07/22 PHP
javascript 面向对象全新理练之继承与多态
2009/12/03 Javascript
js判断一个元素是否为另一个元素的子元素的代码
2012/03/21 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
JavaScript+html5 canvas实现图片破碎重组动画特效
2016/02/22 Javascript
浅谈JS中的三种字符串连接方式及其性能比较
2016/09/02 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
React Native仿美团下拉菜单的实例代码
2017/08/08 Javascript
vue better-scroll插件使用详解
2018/01/25 Javascript
vue-cli扩展多模块打包的示例代码
2018/04/09 Javascript
vue-cli3脚手架的配置及使用教程
2018/08/28 Javascript
JS实现的全选、全不选及反选功能【案例】
2019/02/19 Javascript
vue自定义指令directive的使用方法
2019/04/07 Javascript
Echarts动态加载多条折线图的实现代码
2019/05/24 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
python实现在windows服务中新建进程的方法
2015/06/30 Python
Django验证码的生成与使用示例
2017/05/20 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
解决python多行注释引发缩进错误的问题
2019/08/23 Python
Python二次规划和线性规划使用实例
2019/12/09 Python
python基于opencv检测程序运行效率
2019/12/28 Python
Python动态导入模块和反射机制详解
2020/02/18 Python
Python Map 函数的使用
2020/08/28 Python
使用CSS3来制作消息提醒框
2015/07/12 HTML / CSS
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
网站设计师的岗位职责
2013/11/21 职场文书
家长会学生家长演讲稿
2013/12/29 职场文书
党校培训思想汇报
2013/12/30 职场文书
汽车装潢店创业计划书范文
2014/02/05 职场文书
出纳员岗位责任制
2014/02/11 职场文书
庆元旦文艺演出主持词
2014/03/27 职场文书
升学宴祝酒词
2015/08/11 职场文书