我有一个移动应用程序用来创建用户个人资料的API。似乎偶尔应用程序超时并显示错误消息,但服务器继续创建配置文件。结果是我们有一些重复的配置文件。
我认为,作为一个不需要完整重新架构的“快速修复”,我可以尝试设置PHP脚本的执行时间以匹配应用中的超时限制。我的问题是,如果达到这个时间限制,我可以以某种方式执行“撤消对数据库的更改”脚本,无论是自动还是我指定的?
我知道我应该更多地了解为什么PHP完全达到超时限制(这是几分钟!),但我已经调整了服务器上的位,而且大多数执行时间只有几毫秒。只有少数情况发生超时。举个例子,我看着用户在以色列的这一分钟。以色列的网络连接是否糟糕?任何人都可以想到任何可能导致我正在经历的行为吗?
答案 0 :(得分:1)
一种方法是使用数据库事务。我对PostgreSQL有这方面的经验,但我确信MySql也会这样做。您可以将所有内容包装在事务中。然后,您可以在检测到故障时取消事务,回滚属于事务的所有事务。
然后,您无法捕获脚本超时,因为它是致命错误,但是如果事务没有提交,则应该自动回滚(取消),因此您应该设置...
也许它适合你?
参考文献:
答案 1 :(得分:1)
假设:你正在使用带有INNODB的MySQL。
您应该考虑使用transactions。使用INNODB,交易将rollback if the session times out IF 您将自动提交设置为0,如下所示:
SET GLOBAL init_connect='SET autocommit=0';
使用PDO的交易示例:
try {
// First of all, let's begin a transaction
$db->beginTransaction();
// A set of queries ; of one fails, an exception should be thrown
$db->query('first query');
$db->query('second query');
$db->query('third query');
// If we arrive here, it means that no exception was thrown
// i.e. no query has failed ; and we can commit the transaction
$db->commit();
} catch (Exception $e) {
// An exception has been thrown
// We must rollback the transaction
$db->rollback();
}