MySQLi面向对象实践--multi_query

发布时间:1970-01-01  编辑:Mrs.默先森 

             平在使用sql语句的时候,通常会用到执行数据操作,一般的是单一条的数据操作,多条说句操作没有怎么注意,现在给大家说说多条数据执行的函数。

        多条用分号分隔的SQL语句中,只要有一条SQL语句执行失败,那么这一条SQL语句以及之后的SQL语句就不会执行。只有当第一条SQL语句执行失败,那么multi_query()的返回值才为false。如果第一条SQL语句执行成功了,那么都会返回true。

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     <?php
        $mysqli new Mysqli();
        $mysqli->connect("localhost","root","root","test");
        if $mysqli->connect_errno ){
            die$mysqli->connect_error );
        }
        $mysqli->set_charset("utf8");
        $sql "";
        $sql .= "truncate table mysqli;"//第一条SQL语句
        $sql .= "insert into mysqli (id, name) values (null, 'aaaa'),(null, 'bbbb');";//第二条SQL语句
        $sql .= "update table mysqli where uid = 1;";//第三条SQL语句,因为没有uid字段,所以出错
        $sql .= "insert into mysqli (id, name) values (null, 'cccc');";
        $res $mysqli->multi_query($sql);
        var_dump($res);
     ?>

      查看数据库:

    1
    2
    3
    4
    5
    6
    7
    8
    mysql> select * from mysqli;
    +----+------+
    | id | name |
    +----+------+
    |  1 | aaaa |
    |  2 | bbbb |
    +----+------+
    2 rows in set (0.00 sec)

      可以看到第三条SQL语句执行失败之后,第四条插入数据的SQL语句也没有执行

     

    multi_query执行多条select查询语句

      对于执行多条select语句,那么返回的结果集也会有多个,所以就需要“切换结果集”,

      使用Mysqli_result Mysqli::use_result 和 Mysqli_result Mysqli::store_result()都可以将获取multi_query的结果中 指针所指向的结果集,通过移动内部指针来遍历多个结果集。

      可以使用bool Mysqli::more_result()来检测是否还有结果集,如果有,则可以通过bool Mysqli::next_result()将内部指针指向下一个结果集。

    方法一:使用Mysqli_result Mysqli::use_result()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     <?php
        $mysqli new Mysqli();
        $mysqli->connect("localhost","root","root","test");
        if $mysqli->connect_errno ){
            die$mysqli->connect_error );
        }
        $mysqli->set_charset("utf8");
        $sql "";
        $sql .= "select * from mysqli;";
        $sql .= "select * from user;";
        $res $mysqli->multi_query($sql);
        if$res ) {
            do{
                if$mysqli_result $mysqli->use_result() ){
                    print_r( $mysqli_result->fetch_all( MYSQLI_ASSOC ) );
                }
            while$mysqli->more_results() && $mysqli->next_result() );
        else {
            echo "error ".$mysqli->errno." : ".$mysqli->error;
        }
    ?>

      

    方法二:Mysqli_result Mysqli::store_result()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     <?php
        $mysqli new Mysqli();
        $mysqli->connect("localhost","root","root","test");
        if $mysqli->connect_errno ){
            die$mysqli->connect_error );
        }
        $mysqli->set_charset("utf8");
        $sql "";
        $sql .= "select * from mysqli;";
        $sql .= "select * from user;";
        $res $mysqli->multi_query($sql);
        if$res ) {
            do{
                if$mysqli_result $mysqli->store_result() ){
                    print_r( $mysqli_result->fetch_all( MYSQLI_ASSOC ) );
                }
            while$mysqli->more_results() && $mysqli->next_result() );
        else {
            echo "error ".$mysqli->errno." : ".$mysqli->error;
        }
     ?>

    标签php SQL


本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动。

陶太富博客 http://blog.taotaifu.cn

最新发布

最新评论

0.061477s