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中for循环语句的几种变型
Nov 26 PHP
PHP实现多服务器session共享之NFS共享的方法
Mar 16 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
Aug 22 PHP
php对象在内存中的存在形式分析
Feb 03 PHP
学习php设计模式 php实现单例模式(singleton)
Dec 07 PHP
WordPress分页伪静态加html后缀
Jun 08 PHP
PHP常用函数总结(180多个)
Dec 25 PHP
PHP new static 和 new self详解
Feb 19 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
Jun 17 PHP
thinkphp5.0自定义验证规则使用方法
Nov 16 PHP
PHP操作Postgresql封装类与应用完整实例
Apr 24 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
Dec 20 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中全局变量global和$GLOBALS[]的区别分析
2012/08/06 PHP
将php数组输出html表格的方法
2014/02/24 PHP
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
PHP实现的博客欢迎提示功能(很特别哦)
2014/06/05 PHP
ThinkPHP查询语句与关联查询用法实例
2014/11/01 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
2015/08/25 PHP
php redis实现文章发布系统(用户投票系统)
2017/03/04 PHP
PHP递归实现快速排序的方法示例
2017/12/18 PHP
JavaScript中的闭包原理分析
2010/03/08 Javascript
仅IE不支持setTimeout/setInterval函数的第三个以上参数
2011/05/25 Javascript
Javascript获取HTML静态页面参数传递值示例
2013/08/18 Javascript
javascript常见用法总结
2014/05/22 Javascript
浅析Node.js的Stream模块中的Readable对象
2015/07/29 Javascript
JavaScript编程的单例设计模讲解
2015/11/10 Javascript
javascript产生随机数方法汇总
2016/01/25 Javascript
jquery中each循环的简单回滚操作
2017/05/05 jQuery
基于JavaScript实现百度搜索框效果
2020/06/28 Javascript
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
Vue2.0 事件的广播与接收(观察者模式)
2018/03/14 Javascript
JS文件中加载jquery.js的实例代码
2018/05/05 jQuery
微信小程序模拟cookie的实现
2018/06/20 Javascript
微信小程序项目总结之点赞 删除列表 分享功能
2018/06/25 Javascript
对angular4子路由&amp;辅助路由详解
2018/10/09 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
2018/11/04 Javascript
浅谈scrapy 的基本命令介绍
2017/06/13 Python
Python Pexpect库的简单使用方法
2019/01/29 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
理解Django 中Call Stack机制的小Demo
2020/09/01 Python
购买一个高级域名:BuyDomains
2018/03/11 全球购物
微软新西兰官方网站:Microsoft New Zealand
2018/08/17 全球购物
The North Face意大利官网:服装、背包和鞋子
2020/06/17 全球购物
后勤采购员岗位职责
2013/12/19 职场文书
九年级物理教学反思
2014/01/29 职场文书
2014年工程部工作总结
2014/11/25 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
委托书范本格式
2019/04/18 职场文书