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 相关文章推荐
如何修改和添加Apache的默认站点目录
Jul 05 PHP
php实现执行某一操作时弹出确认、取消对话框
Dec 30 PHP
php判断电脑访问、手机访问的例子
May 10 PHP
php利用cookies实现购物车的方法
Dec 10 PHP
了解PHP的返回引用和局部静态变量
Jun 04 PHP
smarty模板判断数组为空的方法
Jun 10 PHP
php文件上传你必须知道的几点
Oct 20 PHP
Thinkphp无限级分类代码
Nov 11 PHP
php用正则判断是否为数字的方法
Mar 25 PHP
round robin权重轮循算法php实现代码
May 28 PHP
THINKPHP3.2使用soap连接webservice的解决方法
Dec 13 PHP
基于laravel where的高级使用方法
Oct 10 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 header()函数使用说明
2008/07/10 PHP
查找mysql字段中固定字符串并替换的几个方法
2012/09/23 PHP
php动态变量定义及使用
2015/06/10 PHP
由php中字符offset特征造成的绕过漏洞详解
2017/07/07 PHP
php批量转换文件夹下所有文件编码的函数类
2017/08/06 PHP
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
javascript string字符串优化问题
2011/07/31 Javascript
如何获取JQUERY AJAX返回的JSON结果集实现代码
2012/12/10 Javascript
JQuery实现表格中相同单元格合并示例代码
2013/06/26 Javascript
深入理解Javascript里的依赖注入
2014/03/19 Javascript
javascript中clone对象详解
2014/12/03 Javascript
js跨域请求数据的3种常用的方法
2015/12/01 Javascript
基于jQuery实现页面搜索功能
2020/03/26 Javascript
js实现四舍五入完全保留两位小数的方法
2016/08/02 Javascript
用Vue写一个分页器的示例代码
2018/04/22 Javascript
详解vue.js根据不同环境(正式、测试)打包到不同目录
2018/07/13 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
async/await让异步操作同步执行的方法详解
2019/11/01 Javascript
vue自定义正在加载动画的例子
2019/11/14 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题
2020/11/05 Javascript
微信小程序调用后台service教程详解
2020/11/06 Javascript
js实现类选择器和name属性选择器的示例步骤
2021/02/07 Javascript
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
Python使用multiprocessing创建进程的方法
2015/06/04 Python
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
Python OpenCV 直方图的计算与显示的方法示例
2018/02/08 Python
Python实现的简单读写csv文件操作示例
2018/07/12 Python
在PyCharm下打包*.py程序成.exe的方法
2018/11/29 Python
Python的垃圾回收机制详解
2019/08/28 Python
python 识别登录验证码图片功能的实现代码(完整代码)
2020/07/03 Python
CSS3教程(5):网页背景图片
2009/04/02 HTML / CSS
Giglio英国站:意大利奢侈品购物网
2018/03/06 全球购物
澳大利亚实惠时尚女装商店:Katies
2019/06/16 全球购物
为什么要用EJB
2014/04/17 面试题
python字符串拼接.join()和拆分.split()详解
2021/11/23 Python