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下intval()和(int)转换使用与区别
Jul 18 PHP
Ajax PHP 边学边练 之三 数据库
Nov 26 PHP
memcached 和 mysql 主从环境下php开发代码详解
May 16 PHP
浅谈php安全性需要注意的几点事项
Jul 17 PHP
yii操作session实例简介
Jul 31 PHP
php魔术变量用法实例详解
Nov 13 PHP
PHP连接MSSQL方法汇总
Feb 05 PHP
Thinkphp框架中D方法与M方法的区别
Dec 23 PHP
PHP 文件锁与进程锁的使用示例
Aug 07 PHP
thinkPHP框架中执行原生SQL语句的方法
Oct 25 PHP
php设计模式之适配器模式原理、用法及注意事项详解
Sep 24 PHP
Laravel关系模型指定条件查询方法
Oct 10 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
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
PHP的可变变量名的使用方法分享
2012/02/05 PHP
Drupal简体中文语言包安装教程
2014/09/27 PHP
php数值计算num类简单操作示例
2020/05/15 PHP
JavaScript 函数调用规则
2009/09/14 Javascript
jQuery的链式调用浅析
2010/12/03 Javascript
javascript基础知识大集锦(二) 推荐收藏
2011/01/13 Javascript
Js获取数组最大和最小值示例代码
2013/10/29 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
Css3制作变形与动画效果
2015/07/24 Javascript
Jqgrid之强大的表格插件应用
2015/12/02 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
基于原生JS实现图片裁剪
2016/08/01 Javascript
javascript设计模式Constructor(构造器)模式
2016/08/19 Javascript
基于JS分页控件实现简单美观仿淘宝分页按钮效果
2016/11/07 Javascript
原生JS+Canvas实现五子棋游戏
2020/05/28 Javascript
10 种最常见的 Javascript 错误(频率最高)
2018/02/08 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
2019/09/12 Javascript
微信小程序文章详情功能完整实例
2020/06/03 Javascript
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
python中sleep函数用法实例分析
2015/04/29 Python
python中快速进行多个字符替换的方法小结
2016/12/15 Python
Python爬取网易云音乐上评论火爆的歌曲
2017/01/19 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
2019/12/20 Python
什么是Python中的顺序表
2020/06/02 Python
Java爬虫技术框架之Heritrix框架详解
2020/07/22 Python
印度尼西亚手表和包包商店:Urban Icon
2019/12/12 全球购物
《灰椋鸟》教学反思
2014/04/27 职场文书
企业仓管员岗位职责
2014/06/15 职场文书
商务英语专业毕业生求职信
2014/07/06 职场文书
2014幼儿园大班工作总结
2014/11/10 职场文书
2014年幼儿园个人工作总结
2014/11/10 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
世界上超棒的8种逻辑思维
2019/08/06 职场文书