mysqli的多条sql语句操作以及简单的事务处理~~~~~

首先介绍一下多条sql语句的操作~~~~~

普通的方法: $mysqli->query();

通知他们执行方法 : $mysqli->multi_query();

  1. 拼接sql语句

             //更新数据(其他的删除,)
              $sql =  "UPDATE zd_admin SET level = 1 WHERE id = 1;";
              $sql .= "UPDATE zd_message SET price = 1 WHERE id =1;";
              $sql .= "UPDATE zd_login SET level = 1 WHERE id = 1";
    

    如果是更新语句的话,无论是哪种方法都可以。
    但是如果是查询,添加语句的话,因为我们需要查找数据,直接用query就不行

所以要学会使用multi_query()是很重要的

例如:拼接sql语句

        //查询语句
          sql =  "SELECT * FROM zd_admin;";
          $sql .= "SELECT * FROM zd_message;";
          $sql .= "SELECT * FROM zd_login;"; 

- 介绍两个个函数

         $mysqli->store_result():将数据的结果集取出来
         $mysqli->next_result():执行下一个sql语句 
思路:这样子的话,首先执行第一sql条,然后获取到数据,进行CURL操作之后,通知它可以执行第二条sql语句..................

注意:$mysqli->multi_query(); 得到的结果true or false,而true or false 是根据第一条sql语句决定

这里写图片描述

  //查询数据
  $sql =  "SELECT * FROM zd_admin;";
  $sql .= "SELECT * FROM zd_message;";
  $sql .= "SELECT * FROM zd_login;";
  $data = $mysqli->multi_query($sql);
  //获取结果集合的数据,否则结果集是返回1
  $data = $mysqli->store_result();
  if(!$data){
    echo "第一条sql语句有误";
    exit;}
  print_r($data->fetch_row());
  echo "<br/>";
  //将指针移动到下一条sql语句
  $mysqli->next_result();
  $data = $mysqli->store_result();
  if(!$data){
    echo "第二条sql语句有误";
    exit;  }
  print_r($data->fetch_row());
  echo "<br/>";
  //将指针移动到下一条sql语句
  $mysqli->next_result();
  $data = $mysqli->store_result();
  if(!$data){
    echo "第三条sql语句有误";
    exit;
  }
  print_r($data->fetch_row());

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

事务处理!!!

介绍几个函数

 //关闭提交,默认的话是自动提交的
  $mysqli->autocommit(false);
 //手动提交。
  $mysqli->commit();
//执行回滚
  $mysqli->rollback();
  这三个的详细可以查看php手册,这里不讲

在第一步操作之前首先先确定一下自己数据库的搜索引擎:修改成为InooDB
步骤: 进入phpmyadmin->选择数据库->数据表->操作->选择存储引擎
这里写图片描述
1. 首先你必须关闭自动提交数据
2. 拼写sql语句,必须同时运行成功才进行数据库操作,否则不操作
3. 判断每一个sql语句是否执行成功
4. 根据判断的结果决定是执行回滚还是提交操作
附上源码:

<?php
  header("Content-Type:text/html;Charset=utf-8");
  //连接数据库
  $mysqli = new mysqli('localhost','root','','test');
  //处理连接错误
  if(mysqli_connect_errno()){
    echo "数据库连接失败,失败原因:".mysqli_connect_error();
    exit();
  }
  //设置一下编码
    $mysqli->set_charset('utf8');
  //关闭提交,默认的话是自动提交的
  $mysqli->autocommit(false);
  //创建一个SQL语句,必须同时运行成功,不能出现一个成功,一个失败
  $sql = "UPDATE zd_login  SET level = level + 100 WHERE id = 1;";
  $sql .="UPDATE zd_message  SET price = price - 100 WHERE id = 1";
  //判断第一条sql语句是否错误
  if($mysqli->multi_query($sql)){
    //判断影响的条数是否为1,
    $success = $mysqli->affected_rows == 1 ? true : false;
    //这个是可以省略的,这里是给我输出sql语句的错误信息,查找sql错误的时候有用
    if($mysqli->errno){
      echo $mysqli->error;
      exit;
    }
    //下移指针,后马上进行了第二条sql语句的操作
    $mysqli->next_result();
    if($mysqli->errno){
      echo $mysqli->error;
      exit;
    }
    $success2 = $mysqli->affected_rows == 1 ? true :false;
    //如果两条数据都成功的话
    if($success&&$success2){
      //手动提交。
      $mysqli->commit();
      echo "完美提交";
      exit;
    }else{
      //执行回滚
      $mysqli->rollback();
      echo "所有操作归零";
      exit;
    }
  }else{
    echo "第一条sql语句错误";
    exit;
  }

转载于:https://www.cnblogs.com/xiaozheng6/p/6159170.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值