【发布时间】:2015-04-23 06:16:14
【问题描述】:
我的网站有一个视频库,其中只能显示 2 周或更短的视频。以前,我运行一个简单的更新查询,只要任何用户访问此页面就会运行如下:
$unixtime = time();
$query = mysqli_query($cxn, "UPDATE vids SET status = 'inactive' WHERE status = 'active' AND 1209600 < ($unixtime - uploadtime)");
我最近开始了解事件和存储过程,并认为只需在特定时间每 24 小时将此查询作为事件运行一次(并从当前查询所在的页面中删除上面的查询),这将节省许多查询成立)。我正在使用 phpMyAdmin v.4.1.8(共享主机)和 MySQL 5.1.73(自 MySQL 5.1.6 以来似乎已经存在事件支持)并且无法使其正常工作!这是我的查询(由于查询不返回任何内容,我认为这是一个“事件”,尽管我知道“过程”也不需要返回任何内容):
CREATE DEFINER=`mysite`@`localhost`
EVENT `videodeactivate`
ON SCHEDULE EVERY 1 DAY
STARTS '2015-02-21 10:45:00'
ON COMPLETION PRESERVE ENABLE
DO
UPDATE myschema.vids SET status = 'inactive'
WHERE status = 'active'
AND 1209600 < (UNIX_TIMESTAMP() - uploadtime);
(注:1209600 秒 = 2 周)
更新没有发生,尽管事件确实已经安排好了(我看到它是这个数据库“表”正上方的一个红色轮廓的小时钟,当我点击时钟时,程序被标记为启用)。我已经编辑了事件以删除“myschema”(所以 UPDATE vids SET....),甚至删除了 AND 子句。没有抛出任何错误,但事件似乎没有运行。
为什么这个事件,据我所知,在 phpMyAdmin 中似乎是“计划的”,但没有运行?如果所有其他方法都失败了,我可以手动运行查询来停用这些 2 周以上的视频,但我希望看到此事件有效。
【问题讨论】:
-
如果你回显上传时间,是不是和$unixtime格式一样?让我知道您如何将上传时间转换为变量
-
是的,这里的所有时间(time()、uploadtime、UNIX_TIMESTAMP())都是INT
-
uploadtime 只是一个具有 INT 值的列,表示每个视频上传时间的 UNIX 时间戳
-
您是否收到错误消息?我想知道这是否是您的 phpmyadmin 的版本问题。
-
@Jean Gkol 和 Don,感谢您的回复。我打电话给我的托管服务,他们说 MySQL 错误日志中没有错误,并且事件应该可以工作。他们找不到任何问题....我能想到的唯一可能性是他们启用了一些服务器设置来阻止 MySQL 过程和事件的执行(作为某种预防措施)。我仔细检查了一下,查询确实从命令行成功运行,所以我的猜测是问题一定出在托管服务端。