Php MySQLi事件在特定时间后删除行

Php MySQLi事件在特定时间后删除行,php,events,mysqli,where,verification,Php,Events,Mysqli,Where,Verification,我希望我的页面上的用户在一天内验证他们的帐户(电子邮件)。如果用户尚未验证,则datetime(日期)将设置为类似于0000-03-23 15:45:56的值(年份为0000-我知道这会在除夕夜导致问题) 事件:(每小时) 事件不起作用,因此我创建了此测试查询: $resultOne = $mysqli->query("SHOW COLUMNS FROM users WHERE SUBSTR(date, 0, 4)='0000'")or die($mysqli->error); $r

我希望我的页面上的用户在一天内验证他们的帐户(电子邮件)。如果用户尚未验证,则datetime(日期)将设置为类似于0000-03-23 15:45:56的值(年份为0000-我知道这会在除夕夜导致问题)

事件:(每小时)

事件不起作用,因此我创建了此测试查询:

$resultOne = $mysqli->query("SHOW COLUMNS FROM users WHERE SUBSTR(date, 0, 4)='0000'")or die($mysqli->error);
$resultTwo = $mysqli->query("SHOW COLUMNS FROM users WHERE DAY(TIMEDIFF(NOW(), date)) >= 1")or die($mysqli->error);
现在,我收到以下错误消息:

“where子句”中的未知列“date”

问题:

  • 为什么不起作用
  • 您推荐哪些更好的方法来验证用户

谢谢-注意

好的,这里有两个问题:

第一:测试查询

“ShowColumns”不接受我的where子句,但“SELECT*”接受

Second:SUBSTR()

我不知道为什么,但MySQLi SUBSTR必须是:

SUBSTR(date, 1, 4)='0000'
与PHP不同:

substr($user['date'], 0, 4) === '0000'
最后一个问题:

新用户几乎立即被删除(每小时->测试:每分钟),而不是像他们应该的那样在1天后被删除

编辑:

我只想分享我的最终事件代码,以防有人需要它:

DELETE FROM users WHERE SUBSTR(date, 1, 4)='0000' AND HOUR(TIMEDIFF(NOW(), CONCAT(SUBSTR(NOW(), 1, 5), SUBSTR(date, 5)))) >= 24

谢谢大家的评论!-Minding

在backtick`date`中使用日期列,我没有收到任何错误,但未验证的用户不会显示。我不希望日期是一个字符串。(这是一个表字段)如果你想拥有诸如count、type、table或类似的列名,倒勾非常方便——我的意思是,对于mysqlreserved关键字,该列不存在该名称。我在我的电脑上运行了相同的查询,它可以从brand_contact_历史记录中删除,其中SUBSTR(brand_number,0,4)='0000'和DAY(TIMEDIFF(NOW(),brand_number))>=1,尽管我不确定事件的发生。我已经将名称更改为“myDate”,但测试查询仍然抛出相同的错误消息(我还将字段名更改为“myDate”):(
DELETE FROM users WHERE SUBSTR(date, 1, 4)='0000' AND HOUR(TIMEDIFF(NOW(), CONCAT(SUBSTR(NOW(), 1, 5), SUBSTR(date, 5)))) >= 24