这个问题在这里已有答案:
我有一个名为notify的表(寻找者,捐赠者,日期)列
类型(日期时间)的日期列,它存储以下格式YYYY-MM-DD HH:MM:SS
我正在尝试从通知表中选择最新日期的1条记录,然后将日期与当前日期进行比较,并计算两个日期之间的天数 .
<?php
session_start();
$email = $_GET['email'];
date_default_timezone_set('Asia/Riyadh');
$time = date("Y-m-d H:i:s");
$note = "SELECT * FROM notify WHERE seeker='".$_SESSION['email']."'AND donor='".$email."' ORDER_BY `date` DESC LIMIT 1";
$st = $conn->prepare($note);
$st->execute();
if($found = $st->fetch(PDO::FETCH_ASSOC)){
$now = $time;
$old_date = strtotime($found['date']);
$dateif = $now - $old_date;
if(floor($dateif/(60*60*24)) >= 7){
echo "the difference between tow dates is 7 days or more";
} else { echo "difference between tow dates is less than 7 days";}
}
?>
代码不起作用!
我的通知表中只有一条记录,其日期为2013-04-22 09:15:47
8 回答
首先,您应该使用这样的预准备语句:
如果没有占位符,你仍然可以使用SQL注入 .
其次,您不能以这种方式将字符串与整数进行比较:
你应该把苹果和苹果比较:
由于你的
date
列没有按顺序排序 . 此外,在$_SESSION['email']
不受保护的情况下,您将接触到SQL注入 .因此,正确的形式是使用预备语句,以及右列的顺序 . (假设PDO,你也可以使用mysqli):
Jack的答案向您展示了如何正确使用预准备语句 . 以下是使用
DATEDIFF()
简化日期计算的代码 .如果你正在将任何变量附加到字符串然后你需要使用点和oder将它们连接起来将在where条件之后和$ _SESSION里面你错过了引号
要从数据库中检索最新日期,请尝试执行以下sql查询
要检索最新日期,您需要按降序对日期字段进行排序
你试着通过desc订购吗?如下图所示:
你忘了这里约会 . date是mysql中的保留字,
如果你想把它作为列名称放在它周围 .
编辑
你也有额外的空间删除它