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 相关文章推荐
用header 发送cookie的php代码
Mar 16 PHP
PHP中常用数组处理方法实例分析
Aug 30 PHP
解析func_num_args与func_get_args函数的使用
Jun 24 PHP
php判断正常访问和外部访问的示例
Feb 10 PHP
WordPress中"无法将上传的文件移动至"错误的解决方法
Jul 01 PHP
PHP获取一年有几周以及每周开始日期和结束日期
Aug 06 PHP
PHP输出多个元素的排列或组合的方法
Mar 14 PHP
PHP生成推广海报的方法分享
Apr 22 PHP
浅谈PHP进程管理
Mar 08 PHP
php经典趣味算法实例代码
Jan 21 PHP
PHP 99乘法表的几种实现代码
Oct 13 PHP
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
Apr 01 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
收音机指标测试方法及仪器
2021/03/01 无线电
php实现的百度搜索某地天气的小偷代码
2014/04/23 PHP
PHP7.0版本备注
2015/07/23 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
2017/10/19 PHP
一起来写段JS drag拖动代码
2010/12/09 Javascript
js单向链表的具体实现实例
2013/06/21 Javascript
js为空或不是对象问题的快速解决方法
2013/12/11 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
浅谈jQuery中对象遍历.eq().first().last().slice()方法
2014/11/26 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
原生js实现图片层叠轮播切换效果
2016/02/02 Javascript
jQuery实现查找链接文字替换属性的方法
2016/06/27 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
2016/08/05 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
js querySelector() 使用方法
2016/12/21 Javascript
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
nodejs的路径问题的解决
2018/06/30 NodeJs
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
2019/02/21 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
python实现得到一个给定类的虚函数
2014/09/28 Python
Python检测QQ在线状态的方法
2015/05/09 Python
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
Python hashlib模块用法实例分析
2018/06/12 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
2019/08/17 Python
python3实现高效的端口扫描
2019/08/31 Python
CSS3属性box-shadow使用指南
2014/12/09 HTML / CSS
Nike墨西哥官网:Nike MX
2020/08/30 全球购物
护理专业自荐信
2013/12/03 职场文书
奶茶店创业计划书范文
2014/01/17 职场文书
早会主持词
2014/03/17 职场文书
气象学专业个人求职信
2014/04/22 职场文书
复兴之路观后感3000字
2015/06/02 职场文书
趣味运动会通讯稿
2015/07/18 职场文书
解决Navicat for Mysql连接报错1251的问题(连接失败)
2021/05/27 MySQL
R9700摩机记
2022/04/05 无线电