本文实例讲述了php实现基于pdo的事务处理方法。分享给大家供大家参考,具体如下:
实例1:
try {} catch () {} 形式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
<?php $dsn = 'mysql:dbname=cheyun_cms;host=127.0.0.1' ; $user = 'root' ; $password = '111111' ; //采用预处理+事务处理执行SQL操作 //1.连接数据库 try { $pdo = new PDO( $dsn , $user , $password ); $pdo ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); } catch (PDOException $e ) { die ( "数据库连接失败" . $e ->getMessage()); } //2.执行数据操作 try { //开启事物,此时会关闭自动提交 $pdo ->beginTransaction(); $sql = "insert into cy_log (logid, value, action, file) values (?, ?, ?, ?)" ; $stmt = $pdo ->prepare( $sql ); //传入参数 $stmt ->execute( array (null, "test4" , "w" ,11)); $stmt ->execute( array (null, "test5" , "w" ,11)); $stmt ->execute( array (null, "test3" , "w" ,11)); //提交事物,并且 数据库连接返回到自动提交模式 $pdo ->commit(); } catch (PDOException $e ){ echo '执行失败' . $e ->getMessage(); //如果数据库被设置成自动提交模式,rollback 在回滚事务之后将恢复自动提交模式。 //包括 MySQL 在内的一些数据库, 当在一个事务内有类似删除或创建数据表等 DLL 语句时,会自动导致一个隐式地提交。 //隐式地提交将无法回滚此事务范围内的任何更改。即 DDL 语句无法回滚 $pdo ->rollback(); } |
实例2:
if…else…形式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
<?php $dsn = 'mysql:dbname=cheyun_cms;host=127.0.0.1' ; $user = 'root' ; $password = '111111' ; //采用预处理+事务处理执行SQL操作 //1.连接数据库 try { $pdo = new PDO( $dsn , $user , $password ); } catch (PDOException $e ) { die ( "数据库连接失败" . $e ->getMessage()); } //2.执行数据操作 //开启事物 $pdo ->beginTransaction(); $sql = "insert into cy_log (logid, value, action, file) values (?, ?, ?, ?)" ; $stmt = $pdo ->prepare( $sql ); $datalist = array ( array (null, "test9" , "w" ,11), array (null, "test10" , "w" ,11), array (null, "test11" , "w" ,11) ); //是否提交标志位 $isCommit = true; foreach ( $datalist as $data ){ $stmt ->execute( $data ); if ( $stmt ->errorCode()>0){ //回滚 $pdo ->rollback(); $isCommit = false; break ; } } if ( $isCommit ){ //提交事物 $pdo ->commit(); } |
注意:
数据表需要 InnoDB 类型
希望本文所述对大家PHP程序设计有所帮助。