Php 在执行commit()之前重定向

Php 在执行commit()之前重定向,php,redirect,transactions,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

以下是我的脚本结构:

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
语句(总是执行其中一个),这两个块(if和
else
)都有一个
出口。另外
$dbh_conn->commit()行位于该
if-else
语句之后


实际上,永远不应该执行这两个查询。因为有
退出
提交()之前
。但这两个查询也会执行。那么PHP是如何编译我的脚本的呢?我的脚本结构还可以吗?(不需要更改什么?

如果您的表是MYISAM,那么事务将无法工作


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

exit
会立即终止脚本!但是如果您设置了自动提交,那么除非您运行
回滚
数据将被提交,否则实际上还有另一种可能性!这些是MYISAM表吗,因为事务在MYISAM上不起作用,但它允许您仍然使用事务表syntax@RiggsFolly耶。。就是那个。哪一个是那个。。。。正如一位老剑客曾经对梅米说的那样,这里只有一个引擎是米萨姆