日期:2014-05-16  浏览次数:20876 次

mysqli扩展库的批量操作和事务处理

php和jdbc一样也可以批量处理数据和进行事务处理,php要实现这2种操作还是很简单的,下面就来分享下我的学习经验

1.批量查询数据

mysqli处理批量查询可以使用multi_query来查询数据,但是sql的写法有限制写法只能是   sql语句1;sql语句2;sql语句3   ,查询结果也是mysql资源类型,如果要得到查询结果可以使用store_result()来分别获取每一组查询结果,之后用fetch_row或者其他函数获取数据行,之后遍历即可,每遍历完一组需要释放数据结果集。要判断是否还有数据可以使用next_result()来判断,千万要记得用more_results()来避免next_result()出现的异常,最后一步就是关闭数据库连接了。

代码如下:

<?php
     $mysqli=new mysqli("localhost", "root", "123456","student");
     if($mysqli->connect_error){
       die("数据库连接失败:".$mysqli->connect_error);
     }
     $sql="select * from m_student;";
     $sql.="select * from m_user";
     if($mysqli->multi_query($sql)){

        
         do{
         
            if($result= $mysqli->store_result()){
                 
                while($row=$result->fetch_row()){
                    foreach($row as $key=>$val){
                       echo "---".$val;
                    }
                   echo "</br>";
                }
                $result->free();
               
               
                if(!$mysqli->more_results()){
                       break;
                }
               echo "****************************";
               echo "</br>";
         }  

         
        }while($mysqli->next_result());

     }else{
          echo $mysqli->error();
      }
    $mysqli->close();

?>

来看看程序的运行结果

到这里批量处理数据就告一段落了

2.mysqli扩展库的事务处理

事务的特点我就不多说了总结起来就是原子性,隔离性,一致性,持久性,mysqli扩展库使用autocommit,commit,rollback来处理事务,在这之前先理解下保存点的问题。mysql数据库也和其他数据库一样,也可以创建保存点,回滚数据。下面是我对数据库事务的测试

下面自然就是代码的测试了,如下所示

<?php
     $mysqli=new mysqli("localhost", "root", "123456","student");
     if($mysqli->connect_error){
       die("数据库连接失败:".$mysqli->connect_error);
     }
     $mysqli->autocommit(false);
     $sql="update m_student set stuName='潘玮柏' where id=3";
     $sql2="update m_student set stuName='苏有朋' where id=4";
     $result1=$mysqli->query($sql);
     $result2=$mysqli->query($sql2);
     if(!$result1||!$result2){
        echo $mysqli->error;
        $mysqli->rollback();
     }else{
        $mysqli->commit();
        echo "操作成功";
     }
     $mysqli->close();
?>