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及Zend Engine的线程安全模型分析
Nov 10 PHP
php中3des加密代码(完全与.net中的兼容)
Aug 02 PHP
PHP读取PDF内容配合Xpdf的使用
Nov 24 PHP
php 生成唯一id的几种解决方法
Mar 08 PHP
php的declare控制符和ticks教程(附示例)
Mar 21 PHP
PHP.vs.JAVA
Apr 29 PHP
php实现跨域提交form表单的方法【2种方法】
Oct 17 PHP
PHP执行shell脚本运行程序不产生core文件的方法
Dec 28 PHP
Yii2.0多文件上传实例说明
Jul 24 PHP
PHP简单实现正则匹配省市区的方法
Apr 13 PHP
PHP批斗大会之缺失的异常详解
Jul 09 PHP
基于php+MySql实现学生信息管理系统实例
Aug 04 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
初品cakephp 入门基础
2012/02/16 PHP
PHP使用DOM对XML解析处理操作示例
2019/07/04 PHP
php libevent 功能与使用方法详解
2020/03/04 PHP
JS 分号引起的一段调试问题
2009/06/18 Javascript
IE JS编程需注意的内存释放问题
2009/06/23 Javascript
基于jquery的Repeater实现代码
2010/07/17 Javascript
ASP.NET中AJAX 调用实例代码
2012/05/03 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
原生JS可拖动弹窗效果实例代码
2013/11/09 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
javascript事件委托的用法及其好处简析
2016/04/04 Javascript
Bootstrap自动适应PC、平板、手机的Bootstrap栅格系统
2016/05/27 Javascript
JavaScript手机振动API
2016/06/11 Javascript
JS获取和修改元素样式的实例代码
2016/08/06 Javascript
jQuery扩展实现text提示还能输入多少字节的方法
2016/11/28 Javascript
关于vuejs中v-if和v-show的区别及v-show不起作用问题
2018/03/26 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
[43:26]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第二场 11.20
2020/11/23 DOTA
[52:52]完美世界DOTA2联赛PWL S3 LBZS vs access 第一场 12.10
2020/12/13 DOTA
一个基于flask的web应用诞生 flask和mysql相连(4)
2017/04/11 Python
python面试题小结附答案实例代码
2019/04/11 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
python 魔法函数实例及解析
2019/09/25 Python
pytorch-神经网络拟合曲线实例
2020/01/15 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
Python标准库shutil模块使用方法解析
2020/03/10 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
KLOOK客路:发现更好玩的世界,预订独一无二的旅行体验
2016/12/16 全球购物
全球知名的珠宝首饰品牌:Kay Jewelers
2018/02/11 全球购物
超市中秋节促销方案
2014/03/21 职场文书
小学学习雷锋活动总结
2014/07/03 职场文书
机关党员进社区活动总结
2014/07/05 职场文书
体育课外活动总结
2014/07/08 职场文书
法定代表人身份证明书(含说明)
2014/10/02 职场文书
apache基于端口创建虚拟主机的示例
2021/04/22 Servers