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

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

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

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

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

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

主要在内存方面,使用buffer会增加客户端的内存压力,当返回的数据结果特别大的时候可能会占用调用客户端(实际就是一个php进程)比较大的进程。不使用buffer自然对服务端(这里说的是提供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的场景非常少。

mysql_unbuffered_query pdo_php中mysql操作的buffer知识相关推荐

  1. 'mysql_attr_use_buffered_query'_php中mysql操作的buffer知识

    php与mysql的连接有三种方式,mysql,mysqli,pdo.不管使用哪种方式进行连接,都有使用buffer和不使用buffer的区别. 什么叫使用buffer和不使用buffer呢? 客户端 ...

  2. ubuntu中mysql操作_uBuntu下安装MySql,及mySql操作!

    1. 从网上安装 sudo apt-get install mysql-server.装完已经自动配置好环境变量,可以直接使用mysql的命令. 注:建议将/etc/apt/source.list中的 ...

  3. Ubuntu 中Mysql 操作

    一.mysql服务操作 0.查看数据库版本 sql-> status; 1.net start mysql //启动mysql服务 2.net stop mysql //停止mysql服务 3. ...

  4. Linux中MySQL操作

    一.登录MySQL 1. 启动: MYSQL启动文件在/etc/init.d目录下,启动运行以下命令 /etc/init.d/mysql start 2. 停止: /usr/bin/mysqladmi ...

  5. php中mysql_PHP中MySQL操作

    本次使用的demo是MySQL的示例数据库employees, PHP中的demo代码可以在 这里使用的是 一.连接数据库 1.1.连接 打开一个到 MySQL 服务器的连接.有面向对象风格和过程化风 ...

  6. mysqli mysql pdo_PHP中MySQL、MySQLi和PDO的用法和区别

    PHP的MySQL扩展(优缺点) 设计开发允许PHP应用与MySQL数据库交互的早期扩展.mysql扩展提供了一个面向过程 的接口: 并且是针对MySQL4.1.3或更早版本设计的.因此,这个扩展虽然 ...

  7. PHP中MySQL操作相关方法

    mysql_result() 传回第几笔记录,指定关键字 int mysql_result(int result,int row,mixed field) mysql_free_result()释放查 ...

  8. mysql中需要提交的操作_MySQL常用操作及基础知识

    原标题:MySQL常用操作及基础知识 1.启动和关闭mysql服务器: service mysql start service mysql stop 2.重启MySQL服务: service mysq ...

  9. [Python从零到壹] 八.数据库之MySQL和Sqlite基础知识及操作万字详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

最新文章

  1. linux单步跟踪命令,dbx调试跟踪的常用子命令
  2. linux 内核编译 错误 fatal error: linux/compiler-gcc6.h: No such file or directory
  3. UA STAT675 统计计算I 随机数生成7 Envelope Accept-Reject Algorithm
  4. Django中的日期和时间格式 DateTimeField
  5. 详解C语言中 # 和 ## 的用法
  6. java enummap_Java EnumMap containsValue()方法与示例
  7. 网页特效代码大全网址
  8. matlab 可视化(specifier)
  9. Flash:LoadVars数据提交与表单处理
  10. 高数特殊符号-希腊字母
  11. Navicat 数据库可视化工具远程连接MySQL及基本操作
  12. CSS - 鼠标指针样式详解(cursor光标样式、自定义指针图片)
  13. 【机器学习】对数线性模型之Logistic回归、SoftMax回归和最大熵模型
  14. Pytest setup teardown
  15. (转)四旋翼飞行器基本知识
  16. 英雄互娱A股上市路:被收购、独立IPO、借壳均被按下暂停键
  17. 【Linux】进程间通信(学习复习兼顾)
  18. 文化怪杰--辜鸿铭全传!
  19. numpy 计算最大回撤
  20. EasyRecovery适用于Windows和Mac的专业数据恢复软件

热门文章

  1. 漫画通信:惊呆了,手机登录还可以这么玩!
  2. Android Native 内存泄漏系统化解决方案
  3. 坚持探索与落地并重,阿里巴巴云原生之路全景揭秘
  4. 高性能服务器架构思路【不仅是思路】
  5. 亿级消息系统的核心存储:Tablestore发布Timeline 2.0模型
  6. 阿里巴巴、支付宝员工都在用的知识管理工具,究竟有何特别?
  7. 这些数据科学家必备的技能,你拥有哪些?
  8. 2017双11交易系统TMF2.0技术揭秘,实现全链路管理
  9. 真香!8 行代码搞定最大子数组和问题
  10. 谷歌云试图抢占SAP软件云市场;企业上云迎来“黄金时代”;IBM和SAP帮助金融机构加快采用云技术……...