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

 手机用户2502853447_666 发布于 2022-11-19 11:42

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

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

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

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

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

    2022-11-19 12:50 回答
  • 那你如果不启用事务,反而是在插入成功之后在执行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();
        }
    }

    不知道这样对不对~

    2022-11-19 12:50 回答
  • 事务中没提交的操作并没有真的插入到数据库中, 所以自增长的ID不存在
    上面这句话就是错的,是有自增id的。

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

    2022-11-19 12:50 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有