美文网首页
MySQLi扩展面向对象:multi_query()执行多条语句

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

作者: 似朝朝我心 | 来源:发表于2021-06-09 00:46 被阅读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();";
    

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/vkqseltx.html