如何使用PHP插入延迟sql语句?

时间:2011-06-21 14:21:05

标签: php command execute

我想为用户提供一个网站,当用户输入某些东西时,我会把它放到DB中。但是当用户访问.php时,该命令不会执行。我想在一段时间后执行....这就是这样......

10:00 am
User makes the request, and saying that the record will write in the DB one hour later. 

11:00 am 
The request execute, and the DB write a new record. 

我该怎么办?另外,我想添加一个用户取消请求的能力......这样的事情:

10:00 am
User makes the request, and saying that the record will write in the DB one hour later. 

10:30 am
User cancels the request.

11:00 am 
Nothing won't execute.

有什么想法吗?谢谢。

5 个答案:

答案 0 :(得分:3)

  • 用户输入时,将该输入保存在数据库表中,但设置列(已验证)值“0”
  • 一小时后,cron job会将列(已验证)值设置为“1”
  • 如果用户在验证前取消,请删除该记录

示例:

user_input

user_id | input |    input_time     | verified
   1    |  500  | 2011-01-01 12:20  |    1
   2    |  700  | 2011-01-01 01:20  |    0

或者

  • 创建一个新表来存储输入请求
  • 一小时后,一个cron作业会将所有请求转移到原始表格。
  • 如果用户在一小时前取消,请从请求表中删除该记录。

示例:

user_input

user_id | input
   1    |  500 
   2    |  700 

user_requests

user_id  |  input  |    input_time
   3     |   200   | 2011-01-01 07:20   

答案 1 :(得分:3)

对此,cron过于复杂。当您插入数据库时​​,有一个列包含帖子应该生效的日期和时间。例如:

$query = "INSERT INTO table (body, effective_date) VALUES ('body text', '" . strtotime('+1 hour') . "'";

在显示您的内容的页面中,只需添加WHERE effective_date>=NOW(),它就会排除待处理的条目。

答案 2 :(得分:1)

以下是完成此任务的工作流程:

  1. 当用户发出请求时,将请求记录到文件
  2. 创建一个cron作业以运行单独的PHP脚本,该脚本读取文件并将数据插入数据库
  3. 如果用户取消请求,请从文件中删除该请求。
  4. 在“文件”的位置,您还可以在“待处理”表中将请求记录到数据库,并执行类似的操作。

答案 3 :(得分:0)

使用不同的数据库表来安排作业。用户可以从此表中添加,修改和删除作业。然后让cronjob每隔五或十分钟检查一次表,并执行当前时间的作业。

答案 4 :(得分:0)

如果您真的希望在一小时之后将记录输入数据库,则必须为您的条目创建某种队列并设置脚本(通过 Cron 或其他)检查一小时的记录并将它们插入数据库。您尚未指定使用哪个数据库,但据我所知,没有数据库可以让您选择执行插入命令,但要告诉等待一小时实际上是这样做的。

如果您使用队列,那么当用户创建队列时,您可以在其上设置时间戳,并且在该时间戳记的一小时内,用户可以取消该记录。

您的队列也应该驻留在您的数据库中,并且实际上可能是数据最终要进入的实际表。只需使用时间戳查看是否已经过了一个小时并将记录标记为不再< strong>可取消(如果该单词存在...呵呵)。这意味着该条目实际上已经过了一小时后写入数据库。但是你只需要过滤自创建以来是否已经过了一个小时的操作。