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


How can I insert a delay sql statement using PHP?

我想为用户提供一个网站,当用户输入一些东西时,我会将其放入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.

对此有什么想法吗?非常感谢。

  • 当用户输入时,将该输入保存在数据库表中,但设置一个列(已验证)值"0"
  • 一小时后,cron作业将列(已验证)值设置为"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   

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

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

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

以下是实现这一点的工作流:

  1. 当用户提出请求时,将请求记录到文件中
  2. 创建一个cron作业来运行一个单独的PHP脚本,该脚本读取文件并将数据插入数据库
  3. 如果用户取消了请求,请从文件中删除该请求

在"文件"的位置,您还可以将请求记录到"挂起"表中的数据库中,并执行类似的操作。

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

如果您确实希望一小时后将记录输入数据库,则必须为您的条目创建某种队列,并设置一个脚本(通过Cron或其他)来检查一小时前的记录并将其插入数据库。您还没有指定要使用的数据库,但据我所知,没有一个数据库可以让您选择执行insert命令,但告诉它等待一个小时后再执行

如果您使用队列,那么当用户创建它时,它上可能会有一个时间戳,并且在该时间戳后一小时内,用户可以取消记录。

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