mysqli的多条sql语句操作以及简单的事务处理~~~~~
首先介绍一下多条sql语句的操作~~~~~
普通的方法: $mysqli->query();
通知他们执行方法 : $mysqli->multi_query();
拼接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;
  }
                    
                
                
            
        
浙公网安备 33010602011771号