/**
* @author yangyanfei <>
*
简单的事务处理
*/
/**
* 对于数据的操作,事务的处理,您还记得多少?
*
什么是事务?又如何使用事务.看下面操作
* 送给即将毕业的兄弟们,前面的知识,我们得拾起来!
*/
/**
* 数据库系统:MySQL
* 数据库操作:PDO
*
数据库:lamp39_test
* 表名:tb_t1[id,name,age] 表字段
* 使用事务
数据表需要更改为:InnoDB
*/
/**
* 这里主要测试多条语句的插入
*/
try{
$pdo = new
PDO('mysql:host=localhost;dbname=lamp39_test','root','969696');
//pdo方式连接数据库
$pdo ->
setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//修改PDO的报错模式,设置成异常方式
}catch(PDOException
$pe){
die('数据库连接失败!'); //管他什么异常
直接不执行
}
try{
/**
* 重点1
请在箭头下方开启事务
* ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
*/
$pdo -> beginTransaction();
$sql = 'insert into
tb_t1(name,age) values(?,?)'; //组织sql语句 问号不理解的好好看看预处理吧
$stmt =
$pdo -> prepare($sql); //预处理
$stmt ->
execute(array('yangyanfei',22)); //先执行
$stmt ->
execute(array('lamp39',2007));
/**
*
报错的预处理情况
* $sql = 'insert into tb_t1(id,name,age)
values(?,?,?)'; //组织sql语句 问号不理解的好好看看预处理吧
* $stmt = $pdo ->
prepare($sql); //预处理
* $stmt ->
execute(array(1,'yangyanfei',22)); //先执行
* $stmt ->
execute(array(1,'lamp39',2007));
*
解释:因为id是主键,主键设置一样是肯定出错的
* 这是我测试的结果:
*
sql执行失败:SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry
'1' for key 1
*/
/**
* 重点2
请在箭头下方提交事务
* ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
*/
$pdo -> commit();
}catch(PDOException
$pe){
/**
* 重点3 事务一旦出现问题 箭头下方处理
*
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
*/
$pdo ->
rollBack();
//事务回滚[撤销所有的SQL操作]
die('sql执行失败:'.$pe->getMessage());
//提示性错误
}
/**
*
到这基本一个简单的事务处理就完事了,对兄弟们提一下几点建议
* 养成好的编程习惯
* 1:PHP中定义一个变量 [例如$test
= "test";] 能用单引号就用单引号,单引号比双引号的处理效率要高...
* 2:
如果一个页面全是PHP的代码段,最后也把人家最后的结束标记 ?> 给带上,麻烦不了多少的...
*
3:写代码什么都可以乱来,唯独注释,一定要尽量加的,让不会代码的人看到你的代码,像是阅读文档...
*/
?>