Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.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 计算今天日期和MySQL数据库中日期之间的剩余时间_Php_Mysql_Automation_Sql Update - Fatal编程技术网

Php 计算今天日期和MySQL数据库中日期之间的剩余时间

Php 计算今天日期和MySQL数据库中日期之间的剩余时间,php,mysql,automation,sql-update,Php,Mysql,Automation,Sql Update,我正在使用PHP和MySQL作为一个非常小的CMS 功能要求之一是系统返回续费日期之前剩余的天数(例如,从现在到数据库中的续费字段之间剩余的天数) 我将采取的过程是每天凌晨3点,检查所有记录(通过PHP)并更新必填字段。诀窍是,如果这个数字是,您可以在MySQL中使用函数来实现这一点,比如 SELECT TIMESTAMPDIFF(DAY,NOW(),column_name) AS diff FROM table WHERE id = 'whatever'; 这将为您提供剩余天数,插入变量$d

我正在使用PHP和MySQL作为一个非常小的CMS

功能要求之一是系统返回续费日期之前剩余的天数(例如,从现在到数据库中的续费字段之间剩余的天数)


我将采取的过程是每天凌晨3点,检查所有记录(通过PHP)并更新必填字段。诀窍是,如果这个数字是,您可以在MySQL中使用函数来实现这一点,比如

SELECT TIMESTAMPDIFF(DAY,NOW(),column_name) AS diff
FROM table
WHERE id = 'whatever';
这将为您提供剩余天数,插入变量$days。然后

if(($days > 0) && ($days <30)) {
    // do something
}

如果($days>0)和($days在您的查询中执行此操作,则更容易:

$q = "SELECT * 
      FROM testDB 
      WHERE renewal_Date < CURRENT_TIMESTAMP - INTERVAL 30 DAY";
$q=“选择*
来自testDB
其中更新日期<当前时间戳-间隔30天”;

stripslashes?您真的需要升级您的php版本。magic_quotes在默认情况下已被禁用很长一段时间,打开它是服务器配置严重错误和/或php安装严重过时的标志

也就是说,您的查询不会是“重”或“坏”,除非您处理的是数十亿行

SELECT ...
FROM ...
WHERE renewal_date  > (CURDATE() - INTERVAL 30 DAY) AND (renewal_date < CURDATE() )
选择。。。
从…起
其中更新日期>(CURDATE()-间隔30天)和(更新日期

应该获取续签日期在过去30天内的所有记录。

您在第一行(
)有一个输入错误。
$thisId
来自哪里?如果是用户输入,您应该正确地转义它以防止SQL注入。顺便说一句,不要再使用
mysql.*
函数,它们是(请参见红色框)。在你开始问问题之前,你应该试着编写和运行你的代码。@Sammitch-谢谢你,但这篇文章的目的是试图获得执行任务的最佳方法的理论,而不是直接深入代码。实际上,我不知道执行任务的最佳实践。我可以用黑客的方式来做,但我不知道I’我正在努力让它正确。谢谢你的回答。为什么我会被记下来。我知道代码是错误的,但是是pusodo代码!!谢谢你的快速响应。我不知道为什么我会被记下来,因为我解释说这是purley伪代码,所以不必过分担心放错地方。”等等,@LifeInTheGrey,非常感谢。你的回答意味着我仍然需要循环检查每个记录,而不是由数据库执行计算,但如果必须这样做,那就这样做吧,或者有没有办法将sql输入mySQL,它将在每天的某个时间执行命令?非常感谢。我我正在编写以下教程[链接]“如果你知道更好的(modren)教程我将非常感激。我只需要从数据库中插入、调用和删除记录。意思是说我正在wamp上测试,所以这将是我的php版本?如果日期在未来30天内,我希望获得记录。我将在距离当前日期<5天的时间内执行单独的测试(因为将发送不同的电子邮件。从您的示例中,以下操作会起作用吗?
code选择…From…WHERE renewal\u date<(CURDATE()+INTERVAL 6 DAY)
听起来非常感谢您的回复。INTERVAL 30 DAY实际上是一个mySQL命令吗?是的,是的。它听起来有点笨拙,但语法有效
SELECT ...
FROM ...
WHERE renewal_date  > (CURDATE() - INTERVAL 30 DAY) AND (renewal_date < CURDATE() )