這裏是我的代碼:如何在交易時處理錯誤?
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';
}
$dbh_con->commit();
header('Location: /b.php');
exit();
} catch(PDOException $e) {
$dbh_con->rollBack();
$_SESSION['error'] = 'something is wrong';
header('Location: /b.php');
exit();
}
正如你看到的,我的腳本回滾所有查詢時,有一個例外。但是當if ($num_rows['user_id']){
是false
時它不會回滾。那麼我該如何回滾查詢,並在false
的條件下保留錯誤'token is invalid'
?
看到[這個答案](http://stackoverflow.com/a/11050776/2397327)拋出一個異常 –
把你的修改出了try-catch –