【发布时间】:2016-07-26 00:52: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 语句回滚.. 怎么样?
【问题讨论】: