mysqli的 mulit_query执行多条语句。

正常情况下,我们使用mysqli::query($sql) 来查询一条语句,如果多条语句查询,使用mysqli的这个方法就不可以了,需要使用 mysqli::multi_query() 的方法。multi_query() 返回的是一个bool类型,也就是只要第一个sql是正确的,返回true。

使用 mysqli 类中的  store_result() 方法返回所有的结果集。

使用 mysqli类中的   more_results() 方法返回是否还有更多的结果集。

使用 mysqli类中的   next_result() 方法,获得下一个结果集。

 

可以以数组类比:store_result 相当于一个数组,next_result 相当于指针移动到下一个数组元素, more_result 相当于数组在当前指针的情况下,是否还有未访问的元素。

 

<?php 
header('Content-type:text/html;Charset=utf-8');
//error_reporting(E_ALL && E_NOTICE);
define('DB_HOST', '127.0.0.1');
define('DB_USER','root');
define('DB_PWD','123456');
define('DB_NAME','test');
$start = microtime(true);
//连接数据库
$_mysqli = new mysqli(DB_HOST,DB_USER,DB_PWD);
if(mysqli_connect_errno()){
    die('数据库连接错误!'.mysqli_connect_error());
}
//选择数据库,设置编码
$_mysqli->select_db(DB_NAME);
$_mysqli->set_charset('utf8');


$_sql = '';
$_sql .= "select * from ecs_goods where goods_id = 5;";
$_sql .= "select * from ecs_goods where goods_id = 15;";
$_sql .= "select * from ecs_goods where goods_id = 25;";
$_sql .= "select * from ecs_goods where goods_id = 55;";//无该条记录
$_sql .= "select * from ecs_goods where goods_id = 35";
if($_mysqli->multi_query($_sql)){
    do{
        $_result = $_mysqli->store_result();
        $_row = $_result->fetch_row();
        echo $_row[0];
        echo '<br />';
        $_result->free();//释放当前结果集
    }while($_mysqli->more_results() && $_mysqli->next_result());//如果next_result 写在前面无法获得最后一条记录
}else{
    echo('第一条语句出错!');
    exit();
}
$_mysqli->close();

?>

结果:
5
15
25

35

=====================================================================================

当然,以上例子每个sql语句的结果只有一条或者是没有记录,如果sql语句有多条记录。比如:

$_sql = '';
$_sql .= "select goods_id,goods_name,goods_sn from ecs_goods where goods_id in(1,2,32,4);";
$_sql .= "select goods_id,goods_name,goods_sn from ecs_goods where goods_id in(3,7,9);";
$_sql .= "select goods_id,goods_name,goods_sn from ecs_goods where goods_id = 25;";
$_sql .= "select goods_id,goods_name,goods_sn from ecs_goods where goods_id = 55;";//无该条记录
$_sql .= "select goods_id,goods_name,goods_sn from ecs_goods where goods_id = 35";

其中1,2语句都是多条记录。以下方式实现。

do{
        $_result = $_mysqli->store_result();
        while($_row = $_result->fetch_row()){
             echo($_row[0]);
             echo '<br />';
        }
        echo "<hr />";
        $_result->free();//释放当前结果集
    }while($_mysqli->more_results() && $_mysqli->next_result());//如果next_result 写在前面无法获得最后一条记录

结果:

posted on 2017-08-16 11:47  酒醒三更  阅读(436)  评论(0编辑  收藏  举报

导航