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(); ?>