php - 这种方法可以防止重复操作吗?

标签 php mysql codeigniter

我有一个 CodeIgniter 脚本,用户被重定向到一个表单并返回,返回后,仅 1 次某些内容(使用外部 API 的金融交易)应发送给用户。

首先,我所做的只是标记它是否已完成(UPDATE table SET Completed = 1 WHERE id = X)

在发送之前,我检查了 if(intval($completed) === 1){//STOP SENDING}

但后来我想,如果他们打开页面多次太快(意外或手动或使用其他方法)怎么办,所以这就是我所做的:

提问方式:

我在数据库中添加了一个新表,使用唯一键(订单 ID),在将东西发送给用户之前,我在该表中插入一行(如果已插入)(我检查 CodeIgniter 的 $this-> db->affected_rows() > 0) 我发送它,如果没有(重复的唯一键防止插入多次),那么我停止发送。

Is this approach okay to make sure it won't be sent twice to the user?

编辑:

抱歉,如果我不够清楚,我谈论的这件事(应该只发送给用户一次)不是一条消息,而是使用另一个 API 发送给用户的某种金融交易。

最佳答案

如果您希望有一个仅在用户下次进入页面时存在的变量,您最好使用flashdata :

CodeIgniter supports “flashdata”, or session data that will only be available for the next request, and is then automatically cleared.

codeigniter 2 和 codeigniter 3 都支持:

// set data
$this->session->set_flashdata('item', 'value');
// get data
$this->session->flashdata('item');

关于php - 这种方法可以防止重复操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39682519/

相关文章:

mysql - 如何比较sql数据库的日期和时间字段与当前日期,其中日期和时间是2019年6月6日11 :19AM this format in MYSQL

php - 使用 CodeIgniter 自动保存数据时,其他部分正在工作

PHP Laravel : How to set or get Session Data?

C# MySQL 从与另一个匹配的列中检索值

php - Mysql数据库自增id不按升序自增

php - 需要有关通过 PHP 将 SQL 导出为 CSV 的帮助

html - 可以改进/缩短以下使用 CodeIgniter 的 SQL 或 HTML 代码以提高可读性吗?

mysql - 同一查询的 where 子句中的别名值

php - 从 CSV 导入数据时如何更改特定列的背景颜色

php - 将字符串转换为json