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 相关文章推荐
模仿OSO的论坛(五)
Oct 09 PHP
php日历[测试通过]
Mar 27 PHP
PHP Header用于页面跳转要注意的几个问题总结
Oct 03 PHP
如何使用FireFox插件FirePHP调试PHP
Jul 23 PHP
PHP中对缓冲区的控制实现代码
Sep 29 PHP
php数组删除元素示例
Mar 21 PHP
PHP判断文章里是否有图片的简单方法
Jul 26 PHP
yii插入数据库防并发的简单代码
May 27 PHP
实例分析基于PHP微信网页获取用户信息
Nov 24 PHP
PHP中PDO事务处理操作示例
May 02 PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 PHP
PHP中$GLOBALS与global的区别详解
Mar 21 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
雄兵连三大错觉:凯莎没了,凉冰阵亡了,华烨觉得自己又行了
2020/04/09 国漫
如何冲泡挂耳包咖啡?技巧是什么
2021/03/04 冲泡冲煮
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
PHP基于递归算法解决兔子生兔子问题
2018/05/11 PHP
基于jquery的超简单上下翻
2010/04/20 Javascript
jQuery setTimeout传递字符串参数报错的解决方法
2014/06/09 Javascript
JS函数this的用法实例分析
2015/02/05 Javascript
详解ES6中的let命令
2020/04/05 Javascript
javascript实现动态显示颜色块的报表效果
2017/04/10 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
underscore之Collections_动力节点Java学院整理
2017/07/10 Javascript
vuex中使用对象展开运算符的示例
2017/09/25 Javascript
js实现动态改变radio状态的方法
2018/02/28 Javascript
layer弹出层显示在top顶层的方法
2019/09/11 Javascript
vue cli3 调用百度翻译API翻译页面的实现示例
2019/09/13 Javascript
javascript如何实现create方法
2019/11/04 Javascript
js实现星星打分效果
2020/07/05 Javascript
vue实现移动端H5数字键盘组件使用详解
2020/08/25 Javascript
[02:48]DOTA2英雄基础教程 暗夜魔王
2013/12/12 DOTA
django自定义Field实现一个字段存储以逗号分隔的字符串
2014/04/27 Python
python文件的md5加密方法
2016/04/06 Python
Python实现合并两个列表的方法分析
2018/05/28 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
2018/05/29 Python
python绘制圆柱体的方法
2018/07/02 Python
itchat-python搭建微信机器人(附示例)
2019/06/11 Python
Django用户认证系统 组与权限解析
2019/08/02 Python
python使用pip安装SciPy、SymPy、matplotlib教程
2019/11/20 Python
基于python的列表list和集合set操作
2019/11/24 Python
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
护士岗前培训自我评鉴
2014/02/28 职场文书
说明书格式及范文
2014/05/07 职场文书
副乡长群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
《梅花魂》教学反思
2016/02/18 职场文书
如何用Navicat操作MySQL
2021/05/12 MySQL