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中利用XML技术构造远程服务(下)
Oct 09 PHP
php 调用远程url的六种方法小结
Nov 02 PHP
基于PHP magic_quotes_gpc的使用方法详解
Jun 24 PHP
解析php防止form重复提交的方法
Jul 01 PHP
php实现mysql数据库操作类分享
Feb 14 PHP
php实现数组中索引关联数据转换成json对象的方法
Jul 08 PHP
Yii2前后台分离及migrate使用(七)
May 04 PHP
php微信开发之带参数二维码的使用
Aug 03 PHP
laravel 配置路由 api和web定义的路由的区别详解
Sep 03 PHP
PHP实现微信公众号验证Token的示例代码
Dec 16 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
Apr 07 PHP
为你的 Laravel 验证器加上多验证场景的实现
Apr 07 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实现百度网盘图片直链的代码分享
2012/11/01 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
Yii框架核心组件类实例详解
2019/08/06 PHP
javascript 主动派发事件总结
2011/08/09 Javascript
返回页面顶部top按钮通过锚点实现(自写)
2013/08/30 Javascript
JavaScript中Math.SQRT2属性的使用详解
2015/06/14 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
jQuery实现TAB选项卡切换特效简单演示
2016/03/04 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
2017/02/13 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
用Vue-cli搭建的项目中引入css报错的原因分析
2017/07/20 Javascript
AngularJS 教程及实例代码
2017/10/23 Javascript
Egg.js 中 AJax 上传文件获取参数的方法
2018/10/10 Javascript
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
JS实现可控制的进度条
2020/03/25 Javascript
python MySQLdb Windows下安装教程及问题解决方法
2015/05/09 Python
利用Tkinter(python3.6)实现一个简单计算器
2017/12/21 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
python 产生token及token验证的方法
2018/12/26 Python
Python发展简史 Python来历
2019/05/14 Python
python实现一次性封装多条sql语句(begin end)
2020/06/06 Python
Python之多进程与多线程的使用
2021/02/23 Python
英国体育器材进口商店:UK Sport Imports
2017/03/14 全球购物
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
丝芙兰意大利官方网站:Sephora.it
2019/12/13 全球购物
入股协议书
2014/04/14 职场文书
计算机专业毕业生自荐书
2014/06/02 职场文书
人力资源管理毕业生自荐信
2014/06/26 职场文书
流动人口婚育证明范本
2014/09/26 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
初中军训感言
2015/08/01 职场文书
导游词之襄阳古城
2019/09/27 职场文书
62句有关感恩节文案(推荐收藏)
2019/11/28 职场文书
详解JavaScript中的执行上下文及调用堆栈
2021/04/29 Javascript
Java面试题冲刺第十七天--基础篇3
2021/08/07 面试题