首页 > 后端开发 > php教程 > mysql - php中 预处理与事务同时使用

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

WBOY
发布: 2016-06-06 20:18:18
原创
1281 人浏览过

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,那和事务岂不是没有区别了?

<code>$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();
    }
}</code>
登录后复制

不知道这样对不对~

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

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板