Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在用户拍卖结束时自动通知用户?_Php_Mysql_Stored Procedures_Cron - Fatal编程技术网

Php 如何在用户拍卖结束时自动通知用户?

Php 如何在用户拍卖结束时自动通知用户?,php,mysql,stored-procedures,cron,Php,Mysql,Stored Procedures,Cron,我正在建立一个拍卖网站(很像eBay),在那里你可以创建具有给定基本价值和持续时间的拍卖 这基本上是通过PHP和MySQL完成的。在定义的时间段内,用户可以进行投标 为了通知拍卖人(调用PHP脚本或触发其他类型的事件),我应该使用什么方法异步知道拍卖何时结束 编辑: DELIMITER // CREATE PROCEDURE closeAuctions () BEGIN DECLARE now TIMESTAMP DEFAULT CURRENT_TIMESTAMP; START TRANSAC

我正在建立一个拍卖网站(很像eBay),在那里你可以创建具有给定基本价值和持续时间的拍卖

这基本上是通过PHP和MySQL完成的。在定义的时间段内,用户可以进行投标

为了通知拍卖人(调用PHP脚本或触发其他类型的事件),我应该使用什么方法异步知道拍卖何时结束

编辑:

DELIMITER //

CREATE PROCEDURE closeAuctions ()
BEGIN
DECLARE now TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
START TRANSACTION;
SELECT *  FROM Auctions WHERE auction_deadline < now AND auction_closed = '0' FOR UPDATE;
UPDATE Auctions SET auction_closed = '1' WHERE auction_deadline < now;
COMMIT;
END //

DELIMITER ; 
我有一个cronjob启动并运行(每5分钟一次)。我的PHP脚本调用一个MySQL存储过程,该过程选择所有无效拍卖(AuctionEndDateTime 因为我在存储过程中执行
SELECT
,所以我希望返回更新的行,但它只返回我为显示当前时间戳而执行的第一个
SELECT

DELIMITER //

CREATE PROCEDURE closeAuctions ()
BEGIN
SELECT @TIMESTAMP_NOW := NOW();
START TRANSACTION;
SELECT *  FROM Auctions WHERE auction_deadline < @TIMESTAMP_NOW AND auction_closed = '0' FOR UPDATE;
UPDATE Auctions SET auction_closed = '1' WHERE auction_deadline < @TIMESTAMP_NOW;
COMMIT;
END //

DELIMITER ; 
我想要更新的行,因为它们包含我需要通知拍卖商的信息,我正试图用存储过程来实现这一点,所以我只需访问数据库一次

已解决:

DELIMITER //

CREATE PROCEDURE closeAuctions ()
BEGIN
DECLARE now TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
START TRANSACTION;
SELECT *  FROM Auctions WHERE auction_deadline < now AND auction_closed = '0' FOR UPDATE;
UPDATE Auctions SET auction_closed = '1' WHERE auction_deadline < now;
COMMIT;
END //

DELIMITER ; 
分隔符//
创建过程()
开始
现在声明时间戳默认当前时间戳;
启动交易;
从拍卖截止日期<现在且拍卖结束='0'的拍卖中选择*进行更新;
更新拍卖集拍卖已结束='1',其中拍卖截止日期<现在;
犯罪
结束//
定界符;

编写一个脚本,并在脚本中查询结束时间等于现在的数据库。 然后循环浏览找到的拍卖清单,并向所有者发送电子邮件


要使此过程自动化,请每隔一分钟左右通过
CRON运行此脚本。

编写一个脚本,并在脚本中查询结束时间等于现在的数据库。 然后循环浏览找到的拍卖清单,并向所有者发送电子邮件


要使此过程自动化,请每隔一分钟左右通过
CRON运行此脚本。

不确定
=NOW()
是否是件好事。如果拍卖在
09:56:35
结束,脚本在
09:56:00
09:57:00
运行,会发生什么情况?我可能会通过cron来做,如果你在线做,一旦站点满了,它将挂起搜索拍卖的负载,直到完成循环和发送电子邮件。最好是cron它,即使它每5分钟运行一次
SELECT*FROM tblautions,其中AuctionEndDateTime不一定是now函数,只需在DB和in script中使用时间戳,然后进行比较时间戳不好m'kay坚持使用datetime字段类型不确定
=now()
是件好事。如果拍卖在
09:56:35
结束,脚本在
09:56:00
09:57:00
运行,会发生什么情况?我可能会通过cron来做,如果你在线做,一旦站点满了,它将挂起搜索拍卖的负载,直到完成循环和发送电子邮件。最好是cron它,即使它每5分钟运行一次
SELECT*FROM tblautions,其中AuctionEndDateTime不一定是now函数,只需对DB和in脚本使用时间戳,然后进行比较时间戳不好m'kay坚持日期时间字段类型最好将解决方案添加为答案,而不是添加问题最好将解决方案添加为答案,而不是添加问题