PDO 如何在执行 rollBack() 函数之前回滚查询?

2024-05-09

这是我的脚本:

try {
    $dbh_con->beginTransaction();

        $stmt1 = $dbh_conn->prepare("UPDATE activate_account_num SET num = num + 1");
        $stmt1->execute();

        $stmt2 = $dbh_con->prepare("SELECT user_id FROM activate_account WHERE token = ?");
        $stmt2->execute(array($token));
        $num_rows = $stmt2->fetch(PDO::FETCH_ASSOC);

        if ( $num_rows['user_id'] ){
            $_SESSION['error'] = 'all fine';

        } else {
            $_SESSION['error'] = 'token is invalid';
            header('Location: /b.php');
             exit();
        }

    $dbh_con->commit();

    header('Location: /b.php');
    exit();

} catch(PDOException $e) {

    $dbh_con->rollBack();

    $_SESSION['error'] = 'something is wrong';
    header('Location: /b.php');
    exit();
}

如你所见,那else块包含exit()功能。所以当那个else块执行,那么肯定是rollBack();函数不执行,因为在执行之前rollBack();,脚本退出。但令人惊讶的是UPDATE语句回滚..如何?


当所有更改同时发生或根本不发生任何更改至关重要时,就会使用事务。

为了在突然停止的情况下保持数据库的完整性(例如:脚本意外退出、服务器崩溃、电源切断...),事务的实现将保护您,直到发生任何更改为止commit()叫做。当你execute在中间查询中,更改实际上并未到达数据库,而是处于不确定状态。如果你不做出承诺就退出,那么这种困境就会被抛弃。

当你rollBack(),地狱边缘也被扔掉了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PDO 如何在执行 rollBack() 函数之前回滚查询? 的相关文章

随机推荐