MySQLi扩展面向对象:multi_query()执行多条语句

2021-06-09  本文已影响0人  似朝朝我心

multi_query()执行成功与否,和第一条的sql语句密切相关,如果第一条sql语句成功,那么不管后面的第几条sql语句是失败还是成功,都将返回true,换言之,如果第一条sql语句就已经失败了,后面的所有sql虽然为真,但也执行不到了,语句都将会返回false 。

demo1:

<?php
    #设置头信息
    header('content-type:text/html;charset=utf-8');
    #创建数据库连接
    $mysqli = @new mysqli('localhost','root','12345678','qinfb_school');//主机(服务器IP)、数据库用户、数据库密码、你要使用的数据库
    if($mysqli -> errno){
        //检测数据库的连接状态,如果数据库连接失败,给出报错反馈码和报错信息。
        die('connect_error:'.$mysqli -> error);
    }
    #设置字符集
    $mysqli -> set_charset('utf8');
    #多条sql语句书写
    $sql = "insert into student(stu_name,stu_psd,stu_age) values('松木',md5('123456'),21);";
    $sql .= "update student set stu_age=11 where stu_id = 10;";
    $sql .= "delete from student where stu_id = 37;";
    //$mysqli -> query($sql);该实例下的query方法只能执行单条sql语句
    #执行多条sql语句
    $res = $mysqli -> multi_query($sql);
    var_dump($res);

?>

数据库未更新之前:

数据库更新后:


想要获取mysqli这个类下返回的查询结果集,需要调用mysqli这个类下面的use_result()方法或者store_result()方法,不过这里推荐使用store_result()方法,因为该方法更加高效,该方法会将查询到的所有结果集返回给客户端,store_result()方法的功能是:获取第一条sql语句查询产生的结果集

如果有更多的结果集返回,需要调用mysqli类下的more_results()方法:该方法通常在判断逻辑中使用,一般用作检测是否还有更多的结果集

next_result();该方法也是mysqli类下的一个方法,主要功能是:将结果集的指针向下移动一位,通常搭配more_results()方法使用,如果有更多的结果集,那么就让结果集的指针下移一位。

<?php
    #设置头信息
    header('content-type:text/html;charset=utf-8');
    #创建数据库连接,new一个mysqli类
    $mysqli = @new mysqli('localhost','root','12345678','qinfb_school');//主机(服务器IP)、数据库用户、数据库密码、你要使用的数据库
    var_dump($mysqli);
    if($mysqli -> errno){
        //检测数据库的连接状态,如果数据库连接失败,给出报错反馈码和报错信息。
        die('connect_error:'.$mysqli -> error);
    }
    #设置字符集
    $mysqli -> set_charset('utf8');
    #多条sql语句书写
    $sql = "select stu_name,stu_psd,stu_age from student;";
    $sql .= "select * from qinfb_school.student;";
    $sql .= "select NOW();";
    $sql .= "select CURRENT_USER();";
    //$mysqli -> query($sql);该实例下的query方法只能执行单条sql语句
    #执行多条sql语句
    if($mysqli -> multi_query($sql)){
        do {
            if($mysql_result = $mysqli -> store_result()){
                $rows[] = $mysql_result -> fetch_all(MYSQLI_ASSOC);//返回关联部分的所有结果集
            }
        }while($mysqli -> more_results() && $mysqli -> next_result());//如果还有更多的结果集,让结果集的指针下移一位
    }else {
        echo $mysqli -> error;//如果有报错
    }
    print_r($rows);
    $mysqli -> close();//关闭数据库连接,释放结果集
?>

返回的是一个三维数组


注意:sql语句拼接的写法,语句结束分号不能少,不然可能报错,但写单个sql语句的时候,不需要加;

    $sql = "select stu_name,stu_psd,stu_age from student;";
    $sql .= "select * from qinfb_school.student;";
    $sql .= "select NOW();";
    $sql .= "select CURRENT_USER();";
上一篇 下一篇

猜你喜欢

热点阅读