MYSQLI_USE_RESULT or MYSQLI_STORE_RESULT

之前都是使用同事封装好的mysql类,今天做性能测试时自己手动编写了查询mysql的操作。偶然发现mysqli::query(或者mysqli_query有一个参数$resultmode取值为MYSQLI_USE_RESULT or MYSQLI_STORE_RESULT。平时封装好的类中都是使用默认的MYSQLI_STORE_RESULT。Phpmanul上给出了这么一段话:

 Either the constant MYSQLI_USE_RESULT or MYSQLI_STORE_RESULT depending on the desired behavior. By default, MYSQLI_STORE_RESULT is used.

If you use MYSQLI_USE_RESULT all subsequent calls will return error Commands out of sync unless you call mysqli_free_result().

MYSQLI_USE_RESULT:

MYSQLI_STORE_RESULT:

看到没有,果然有区别,使用MYSQLI_USE_RESULT时返回的结果集对象的num_rows为0,而使用MYSQLI_STORE_RESULT时返回的结果集对象的num_rows为本次查询对应的实际行数。

上面一个结果是store的,后面一个是use的,上面小号的内存比下面多一个数量级,而且只取了id和url两个字段,下面出现负数是因为affect_num在MYSQLI_USE_RESULT时为0,而每次的内存增量后面的一种情况也会较少。

当我要使用一个脚本挂机处理50w+条记录的时候,简单的方法就是使用use来获取数据,这样每次只从服务器取一条。复杂点的计算好php内存容量,每次定量取几千条,然后处理写个循环处理,这样可以减少服务端压力。更复杂的可以多进程处理开三个进程跑,每次都按复杂的方法处理。

时间: 2024-10-11 07:39:13

MYSQLI_USE_RESULT or MYSQLI_STORE_RESULT的相关文章

PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别

这篇文章主要介绍了PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别,本文给出了这两个参数的5个区别,需要的朋友可以参考下 虽然nosql变得流行,但是我感觉sql还是主流今天在翻php manul的时候,发现mysqli 的查询可以传递一个有意思的参数 @mysqli_query($this->sql,$SQL,($method ? MYSQLI_USE_RESULT : MYSQLI_STORE_RESULT)); 在php

php的mysql\mysqli\PDO(二)mysqli

原文链接:http://www.orlion.ga/1147/ mysqli有面向对象风格和面向过程风格,个人感觉还是用面向对象风格比较好(毕竟是面向对象) 1.mysqli::_construct() mysqli::__construct ([ string $host = ini_get("mysqli.default_host") [, string $username = ini_get("mysqli.default_user") [, string $

mysqli_store_result方法

描述: 如果当前执行的查询存在多个结果,返回“真”,而且应用程序必须调用mysql_next_result()来获取结果. 返回值: 如果存在多个结果,返回“真”(1),如果不存在多个结果,返回“假”(0). 在大多数情况下,可调用mysql_next_result()来测试是否存在多个结果,如果存在多个结果,对检索进行初始化操作. 用法: mysqli_more_results(connection); connection     必需.规定要使用的 MySQL 连接    

PHP访问MySQL的数据--读书笔记4

<?php   header('Content-Type:text/html;charset=utf-8'); // mysqli_connect('IP:3306','帐号','密码','要操作的数据库名称'); $con=mysqli_connect('127.0.0.1','root','123.'school'); //设置编码 if($conn){ echo '链接成功'; } mysqli_set_charset($con,'utf8'); //数据库操作[例如所有学生的名单]$sq

mysqli

引用:http://www.runoob.com/php/php-ref-mysqli.html: PHP 5 MySQLi 函数 函数 描述 mysqli_affected_rows() 返回前一次 MySQL 操作所影响的记录行数. mysqli_autocommit() 打开或关闭自动提交数据库修改. mysqli_change_user() 更改指定数据库连接的用户. mysqli_character_set_name() 返回数据库连接的默认字符集. mysqli_close() 关闭

13-1 在PHP中使用mysqli与MySQL交互

1.建立.关闭与MySQL服务器的连接    1)连接指定的mysql服务器       [email protected]_connect($host, $user, $password,$database,$port);   2)连接错误时的提示       int mysqli_connect_errno ();//返回最后一次连接调用的错误代码       string mysqli_connect_error ();//返回一个字符串描述的最后一次连接调用的错误代码   3)设置默认字

php操作mysqli(示例代码)

<?php define("MYSQL_OPEN_LOGS",true); class mysqliHelp { private $db; public function __construct()    {     //如果要查询日志log的话,怎么办 } public function __get($name )     {       //echo "__GET:",$name;       if(in_array($name,array("d

PHP小知识总结(1)

1. mysqli_query - 对数据库执行一次查询 失败时返回 FALSE ,通过 mysqli_query() 成功执行SELECT, SHOW, DESCRIBE或 EXPLAIN查询会返回一个mysqli_result 对象,其他查询则返回 TRUE:   返回一个对象:object(mysqli_result)#2 (5) {                                                             ["current_field&qu

php mysqli mysqli_query() mysqli_real_query()

2016年11月26日 15:22:27 星期六 场景: PHP从mysql中读取数据 1. 一次性读取所有数据放给PHP 2. 每次循环只读取一掉记录 数据量小的时候可以使用第一种方法, 数据量很大的时候就需要使用第二种方法了 第二种方法的使用: 如果用 php::mysql 扩展,  有一个函数叫做 mysql_unbuffered_query 如果用 php::mysqli 扩展, 有下面两种等价的使用方式: 1) mysqli::query('select * from ....', M