MySQLi Prepared Statement将当前时间与存储的日期时间进行比较?

时间:2016-05-09 04:22:24

标签: php mysqli prepared-statement

我有HTML表单,我不希望用户每天使用超过一次。

到目前为止,我已经找到了应该做的事情,但我并不确定如何做。

当用户提交表单时,我会存储他们的" IP" (列ip)以及当前时间(列submitTime)和当前时间+23小时(列releaseTime):

$submitDate = date("Y-m-d H:i:s");
$currentTime = time();
$releaseTime = date("Y-m-d H:i:s", strtotime('+23 hour', $currentTime));

但我不知道的是我该怎么办?我觉得我被卡住了。
我知道我应该将$ currentTime与我从MySQL获得的releaseTime进行比较,但是如何?

到目前为止,我得到了这段代码(请参阅注释行):

$ip = $_SERVER['REMOTE_ADDR'];
$stmt1 = $conn->prepare('SELECT * FROM IPlock WHERE ip=?') or die('Couldn\'t check the IP');
$stmt1->bind_param("s", $ip);
$stmt1->execute();
$stmt1->store_result();
$countRows = $stmt1->num_rows;
$stmt1->close();
if ($countRows > 0) {
/*
 Code to check for how long the IP has existed in MySQL
 If it has existed for more then 23 hours, remove it and proceed.
 else abort (since its blacklisted for another x hours) 
*/
}

我知道我不应该使用IP来识别用户,因为有些用户共享他们的IP,但在这种情况下我真的不得不这样做。

2 个答案:

答案 0 :(得分:0)

您可以使用它来检查是否在过去24小时内提交了表单。

SELECT * FROM IPlock WHERE `ip`=? AND `submitTime` > NOW() - INTERVAL 24 HOUR;

如果在过去24小时内未提交IP,则不会返回任何行。

修改

除此之外,没有必要使用PHP date()函数,你可以像

一样进行插入
INSERT INTO IPlock (`ip`, `submitTime`) VALUES ('127.0.0.1', NOW());

请注意,CURRENT_TIMESTAMP也可以正常使用。

答案 1 :(得分:0)

事实上,您的问题与您提出的问题不同。

要比较mysql格式的日期时间值,您只需要对它进行比较 - 这不是什么大问题。

真正的问题是如何获得比较的价值(使用您当前的代码,您可以' t)以及如果您发现记录已过时该怎么办。

因此,首先需要获取日期时间值:

$stmt1 = $conn->prepare('SELECT releaseTime FROM IPlock WHERE ip=?');//never use die()
$stmt1->bind_param("s", $_SERVER['REMOTE_ADDR']);
$stmt1->execute();
$stmt1->store_result();
$stmt1->bind_result($releaseTime);
$stmt1->fetch();

现在您可以开始查看日期了。请注意,您不需要此处的num行。

if ($releaseTime > date("Y-m-d H:i:s")) {
/*
 Code to check for how long the IP has existed in MySQL
 If it has existed for more then 23 hours, remove it and proceed.
 else abort (since its blacklisted for another x hours) 
*/
}