php通过pdo+mysql事务实现文章添加过程,

直接看代码吧,文章标题等信息跟文章内容分成两个表存储。为什么请百度。内容表包含文章ID、内容字段。看代码

<?php
//事务添加文章
function AddArticle(){
 try{
  $pdo= new PDO(
   "mysql:host=127.0.0.1;dbname=gao","root","0.", 
   array(
    PDO::MYSQL_ATTR_INIT_COMMAND => "set names 'utf8';",
    //PDO::ATTR_AUTOCOMMIT   => 0 ,//关闭自动提交
   )
  );
  //这个是通过设置属性方法进行关闭自动提交和上面的功能一样
  $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 0);
  //开启异常处理
  $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
 }catch(PDOException $e){
  echo "数据库连接失败:".$e->getMessage();
        exit;
 }
 
 try{
        $pdo->beginTransaction();//开启事务处理       
  
  //添加标题 ,参数形式
        $sql="insert into tb_article(`title`) values(?)";
  $arr=array('标题abc');
  $dp=$pdo->prepare($sql);
  if(is_array($arr)){//加入参数
   for($i=1;$i<=count($arr);$i++){
    $dp->bindParam($i,$arr[$i-1]);
   }
  }
  $dp->execute();//执行
  $aid=$pdo->lastInsertId();//获取返回的自增字段ID
        if($aid+1<=1)
            throw new PDOException("添加文章失败");//那个错误抛出异常
  
  //添加内容
        $sql="insert into tb_body(`aid`,`body`) values(?,?)";
  $arr=array($aid,'这是内容部分');
  $dp=$pdo->prepare($sql);
  if(is_array($arr)){
   for($i=1;$i<=count($arr);$i++){
    $dp->bindParam($i,$arr[$i-1]);
   }
  }
  $efcount=$dp->execute();
        if(!$efcount)
            throw new PDOException("添加文章内容失败");
        echo "添加文章成功";
        $pdo->commit();//添加成功就提交事务
  
    }catch(PDOException $e){
        echo '事务执行失败:'.$e->getMessage();
        $pdo->rollback();
    }
    //开启自动提交
    $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 1);
    //设置错误报告模式 ERRMODE_SILENT    ERRMODE_WARNING
}
AddArticle();
?>