gpt4 book ai didi

php - 在失败的情况下运行查询两次

转载 作者:行者123 更新时间:2023-12-01 00:20:23 24 4
gpt4 key购买 nike

我总是检查 MySQL 查询是否成功,如果不成功则再次运行它们(而不是显示或记录错误等)

有时对于重要的查询,我什至将它们放在有限的 While 循环中尝试 5-10 次以防失败

例如:

$update = $db->update("table", ["today" => $date]]);

if ($update === FALSE OR $affected_rows < 1)
{
// Optional sleep(1);
$update = $db->update("table", ["today" => $date]]);
}

if ($update === FALSE OR $affected_rows < 1)
{
// Now log if the second try failed too...
}

但今天我在想这是否是正确的做法,甚至可能已经有一个函数可以重试而不是在代码中输入两次相同的查询(所以如果我们改变一个我们必须记住改变其他)

我的问题是

  1. 这样做正确吗?有什么缺点吗? (我的意思是如果成功了就不会运行两次)

  2. 有没有更简单的方法来做到这一点(不使用相同的代码两次)?我正在复制粘贴相同的查询两次,如果我更改了第一个而忘记更改第二个则可能很危险(我使用的是 Meedo,它是一个 PDO 包装器)

我知道如果 MySQL 关闭等,第二个将无法工作,我这样做是为了临时失败的尝试或中止或第二次尝试可能不会发生的任何其他事情)

最佳答案

很明显,您在这里奉行的策略“被设计破坏”。您没有弄清楚为什么之前的尝试没有成功,而是(盲目地...)“只是再试一次”。 (而且,显然,在您的“开发环境”的象牙塔中,它还没有[还(!)]“失败两次!”但是,迟早,它会。)

您需要“一劳永逸地深入底部”。

为什么 (?!) 查询在第一次尝试时就失败了?有什么合理的理由吗? (我没看到...) 因此,“仅仅让问题(似乎)‘消失’”是不够的。您必须解决

当您在 SQL 中“更新事物”时,在共享数据库中,您通常需要使用“事务”。 (并且,在 MySQL 环境中,这意味着您必须使用 “InnoDB” 表。)您BEGIN TRANSACTION,然后进行一系列更新(或插入、删除,无论...),然后您可以COMMITROLLBACK

关于php - 在失败的情况下运行查询两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30518605/

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