mysql 预处理创建事务_mysql-php中预处理与事务同时使用

sql1,sql2两条语句分别插入到不同的表中,sql2某一个属性就是sql1插入后自增长的ID值。

我希望使用预处理来处理sql1和sql2, 同时希望他们执行的时候是在一个事务中, 现在问题就是, 事务中没提交的操作并没有真的插入到数据库中, 所以自增长的ID不存在,sql2插入出错, 肿麽办?

我现在处理方法就是不启动事务, 预处理sql1, 然后max出结果ID, 在预处理sql2, 一旦sql2出现异常, 根据ID删掉记录。 感觉有点麻烦。

其实我主要想知道,例如cnblog, 文章html内容和文章本身属性应该不是存在一个表中,如果是两个表, 他们是怎么处理同时插入和防注入的......

回复内容:

sql1,sql2两条语句分别插入到不同的表中,sql2某一个属性就是sql1插入后自增长的ID值。

我希望使用预处理来处理sql1和sql2, 同时希望他们执行的时候是在一个事务中, 现在问题就是, 事务中没提交的操作并没有真的插入到数据库中, 所以自增长的ID不存在,sql2插入出错, 肿麽办?

我现在处理方法就是不启动事务, 预处理sql1, 然后max出结果ID, 在预处理sql2, 一旦sql2出现异常, 根据ID删掉记录。 感觉有点麻烦。

其实我主要想知道,例如cnblog, 文章html内容和文章本身属性应该不是存在一个表中,如果是两个表, 他们是怎么处理同时插入和防注入的......

事务中没提交的操作并没有真的插入到数据库中, 所以自增长的ID不存在

上面这句话就是错的,是有自增id的。

事物和预处理冲突吗? 应该不冲突啊。开启事物,然后正常预处理,开启事物后应该也有自增ID吧。最后判断是否回滚。

那你如果不启用事务,反而是在插入成功之后在执行sql2,那和事务岂不是没有区别了?

$sql1 = 'update table1 set val=7 where id=5';

$dbh->beginTransaction ();

$res = $dbh->exec($sql1);

if ($res){

//如果执行成功,那么执行第二条记录

$res2 = $dbh->exec('update table1 set val=7 where pid='.$res);

if ($res2){

$dbh->commit();

}else{

$dbh->rollback();

}

}

不知道这样对不对~

使用事务就可以了,事务可以做到回滚,sql1执行成功了,sql2执行异常,是可以回滚的,你可以制造sql2的异常测试下。

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值