【问题标题】:Not sure why mysql event is not running不知道为什么mysql事件没有运行
【发布时间】: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 过程和事件的执行(作为某种预防措施)。我仔细检查了一下,查询确实从命令行成功运行,所以我的猜测是问题一定出在托管服务端。

标签: phpmyadmin mysql-event


【解决方案1】:

我刚收到一封来自我的网络托管服务 (JustHost) 的电子邮件。显然,为了能够安排活动并执行它,root 访问权限是必要的......托管您自己的网站的另一个理由 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-21
    • 1970-01-01
    • 2017-04-01
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    相关资源
    最近更新 更多