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中使用Oracle数据库(5)
Oct 09 PHP
用php实现的下载css文件中的图片的代码
Feb 08 PHP
PHP实现多条件查询实例代码
Jul 17 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
Nov 26 PHP
php使用timthumb生成缩略图的方法
Jan 22 PHP
CI框架集成Smarty的方法分析
May 17 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
Jul 01 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
Dec 29 PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 PHP
PHP实现小程序批量通知推送
Nov 27 PHP
php高清晰度无损图片压缩功能的实现代码
Dec 09 PHP
Laravel框架Eloquent ORM删除数据操作示例
Dec 03 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
PDO版本问题 Invalid parameter number: no parameters were bound
2013/01/06 PHP
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
PHP session 会话处理函数
2016/06/06 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
2017/04/10 PHP
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
Javascript中判断一个值是否为undefined的方法详解
2016/09/28 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
Bootstrap面板(Panels)的简单实现代码
2017/03/17 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
vue自定义表单生成器form-create使用详解
2019/07/19 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
2019/08/28 Javascript
python利用elaphe制作二维条形码实现代码
2012/05/25 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
python3.6+selenium实现操作Frame中的页面元素
2019/07/16 Python
Python PO设计模式的具体使用
2019/08/16 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
2019/12/27 Python
浅谈CSS3动画的回调处理
2016/07/21 HTML / CSS
戴森美国官网:Dyson美国
2016/09/11 全球购物
2014自主招生自荐信策略
2014/01/27 职场文书
教育英语专业毕业生的求职信
2014/03/13 职场文书
个人社会实践自我鉴定
2014/03/24 职场文书
个人函授自我鉴定
2014/03/25 职场文书
英语课前三分钟演讲稿
2014/08/19 职场文书
银行员工犯错检讨书
2014/09/16 职场文书
授权委托书(法人单位用)
2014/09/29 职场文书
常务副县长“四风”个人对照检查材料思想汇报
2014/10/02 职场文书
2015年社区服务活动总结
2015/03/25 职场文书
主婚人致辞精选
2015/07/28 职场文书
2016年春季开学典礼新闻稿
2015/11/25 职场文书
redis通过6379端口无法连接服务器(redis-server.exe闪退)
2021/05/08 Redis
python中filter,map,reduce的作用
2022/06/10 Python