PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别


Posted in PHP onSeptember 29, 2014

虽然nosql变得流行,但是我感觉sql还是主流
今天在翻php manul的时候,发现mysqli 的查询可以传递一个有意思的参数

@mysqli_query($this->sql,$SQL,($method ? MYSQLI_USE_RESULT : MYSQLI_STORE_RESULT));

在php manul上面对这两个参数是这样解释的。

Either the constant MYSQLI_USE_RESULT or MYSQLI_STORE_RESULT depending on the desired behavior. By default, MYSQLI_STORE_RESULT is used.

如果什么也不传,那就默认为MYSQLI_STORE_RESULT。

在phpmanul上面有人说了这样一句话If we have to retrieve large amount of data we use MYSQLI_USE_RESULT

其实这两个参数的区别还是很大的。

(1)区别在于从服务器上检索结果集的行。
(2)MYSQLI_USE_RESULT 启动查询,但实际上并未获取任何行
(3)MYSQLI_STORE_RESULT 立即检索所有的行
(4)MYSQLI_STORE_RESULT 从服务器上检索结果集时,就提取了行,并为之分配内存,存储到客户机中,随后调用 mysqli_fetch_array()就再也不会返回错误,因为它仅仅是把行脱离了已经保留结果集的数据结构,mysqli_fetch_array()返回 NULL始终表示已经到达结果集的末端。
(5)MYSQLI_USE_RESULT 本身不检索任何行,而只是启动一个逐行的检索,就是说必须对每行调用 mysqli_fetch_array()来自己完成。既然如此,虽然正常情况下,mysqli_fetch_array()返回NULL仍然表示此时已到达结果集的末端,但也可能表示在与服务器通信时发生错误。

总结

与MYSQLI_USE_RESULT相比,MYSQLI_STORE_RESULT 有着较高的内存和处理需求,因为是在客户机上维护整个结果集,所以内存分配和创建数据结构的耗费是非常巨大的,如果想一次检索多个行,可用 MYSQLI_USE_RESULT。

MYSQLI_USE_RESULT有着较低的内存需求,因为只需给每次处理的单行分配足够的空间。这样速度就较快,因为不必为结果集建立复杂的数据结构。另一方面,MYSQLI_USE_RESULT把较大的负载加到了服务器上,它必须保留结果集中的行,直到客户机看起来适合检索所有的行。

PHP 相关文章推荐
用PHP实现登陆验证码(类似条行码状)
Oct 09 PHP
php读取javascript设置的cookies的代码
Apr 12 PHP
PHP pathinfo()获得文件的路径、名称等信息说明
Sep 13 PHP
php excel reader读取excel内容存入数据库实现代码
Dec 06 PHP
php利用新浪接口查询ip获取地理位置示例
Jan 20 PHP
PHP is_subclass_of函数的一个BUG和解决方法
Jun 01 PHP
thinkphp学习笔记之多表查询
Jul 28 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
May 20 PHP
PHP使用GD库输出汉字的方法【测试可用】
Nov 10 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
Jun 11 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
Sep 16 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
Aug 26 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
Sep 28 #PHP
php中json_encode UTF-8中文乱码的更好解决方法
Sep 28 #PHP
初识PHP
Sep 28 #PHP
浅谈php和.net的区别
Sep 28 #PHP
PHP常用技术文之文件操作和目录操作总结
Sep 27 #PHP
Drupal简体中文语言包安装教程
Sep 27 #PHP
PHP常用编译参数中文说明
Sep 27 #PHP
You might like
提高PHP性能的编码技巧以及性能优化详细解析
2013/08/24 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
extjs 学习笔记(三) 最基本的grid
2009/10/15 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
深入理解javascript的执行顺序
2014/04/04 Javascript
jquery浏览器滚动加载技术实现方案
2014/06/03 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
2015/05/14 Javascript
jquery简单倒计时实现方法
2015/12/18 Javascript
AngularJS中使用HTML5手机摄像头拍照
2016/02/22 Javascript
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
小程序外卖订单界面的示例代码
2019/12/30 Javascript
JS this关键字在ajax中使用出现问题解决方案
2020/07/17 Javascript
python encode和decode的妙用
2009/09/02 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
selenium+python自动化测试之多窗口切换
2019/01/23 Python
Python3.5 Pandas模块之DataFrame用法实例分析
2019/04/23 Python
python SQLAlchemy 中的Engine详解
2019/07/04 Python
pandas如何处理缺失值
2019/07/31 Python
用CSS3将你的设计带入下个高度
2009/08/08 HTML / CSS
css3实现背景动态渐变效果
2019/12/10 HTML / CSS
常用的HTML5列表标签
2017/06/20 HTML / CSS
美国智能家居专家:tink
2019/06/04 全球购物
多媒体编辑专业毕业生推荐信
2013/11/05 职场文书
优秀士兵个人事迹材料
2014/01/19 职场文书
汽车销售员岗位职责
2015/04/11 职场文书
女儿满月酒致辞
2015/07/29 职场文书
车间班组长竞聘书
2015/09/15 职场文书
Python Numpy之linspace用法说明
2021/04/17 Python
解决mysql模糊查询索引失效问题的几种方法
2021/06/18 MySQL
mysql配置SSL证书登录的实现
2021/09/04 MySQL
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle