执行commit()之前重定向

时间:2016-07-14 01:45:35

标签: php redirect transactions

这是我的脚本结构:

try {
    $dbh_conn->beginTransaction();

    $stmt1 = $dbh_conn->prepare("UPDATE ...");
    $stmt1->execute(array($val1));

    if ( condition 1 ) {
        $stmt2 = $dbh_conn->prepare("DELETE ...");
        $stmt2->execute(array($val2));

        header('location: ../page1');
        exit;

    } else {
        header('location: ../page2');
        exit;
    }

    $dbh_conn->commit();

} catch(PDOException $e) {

    $dbh_conn->rollBack();
    echo $e;

}

令人惊讶地工作..正如您所看到的那样if - else语句(其中一个将被执行),它们都阻止ifelse有一个exit;。另外$dbh_conn->commit();行在if - else语句之后。

实际上从不执行这两个查询。因为exit;之前有commit()。但是两个查询都会执行。那么PHP如何编译我的脚本?我的脚本结构还可以吗? (无需更改内容?)

1 个答案:

答案 0 :(得分:1)

如果你的桌子是MYISAM,那么交易不起作用。

但是,所以mysql api不会中断,事务函数/方法不会抛出它们看起来正常工作的错误,除非每个数据库更新都在发生时提交。