gpt4 book ai didi

php - 有交易时如何处理错误?

转载 作者:行者123 更新时间:2023-11-29 01:20:19 24 4
gpt4 key购买 nike

这是我的代码:

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' 呢?

最佳答案

只需抛出一个异常并像您已经做的那样捕获它。但不是一个 catch 语句而是两个:

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 {
throw new \Exception('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();
} catch(Exception $e) {

$dbh_con->rollBack();

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

关于php - 有交易时如何处理错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38579278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com