gpt4 book ai didi

php - 将事务用于具有相关结果的查询

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

这是我的脚本结构:

try {
$dbh_conn->beginTransaction();

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

if($num_rows) {

$user_id = $num_rows['user_id'];

$stmt2 = $dbh_conn->prepare("UPDATE users SET active = 1 WHERE id = ?");
$stmt2->execute(array($user_id));
$updated = $stmt2->rowCount();

if ( $updated > 0 ){

$stmt3 = $dbh_conn->prepare("DELETE FROM activate_account WHERE token = ?");
$stmt3->execute(array($validate_activate_token));

$status = "all fine";

} else {

$status = "first problem";
}

} else {

$status = "second problem";
}

$dbh_conn->commit();
echo $status;
die;

} catch(PDOException $e) {

$dbh_conn->rollBack();

$status = "third problem";
echo $status;
die;
}

我的代码的结果总是第二个问题。为什么?我该如何重写我的代码来修复它?

请注意,我已经单独测试了此条件if($num_rows) {(单独在另一个脚本中)并且它是true,但是当我将其写入上面的脚本时,它总是错误

最佳答案

事务的目的是确保必须一起发生的查询永远不会被破坏。在您的用例中,第一个查询可以单独执行,没有任何缺点。

将最后两个放入事务中,但保留第一个。如果第一个失败,就不要运行另外两个。

如果第一个成功,但另外两个(在事务中)之一失败,以致两者都没有提交,那么执行第一个不会让您的情况变得更糟。

关于php - 将事务用于具有相关结果的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38364712/

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