用于在最后一天查找事件的Mysql语句

时间:2012-02-24 19:02:26

标签: php mysql

我正在尝试使用mysql PDO语句来选择最后一天发生的所有失败登录。我的表有4列... id(只是自动增量以生成不同的条目),ip(字符15),失败(布尔值),firstattempt(时间戳)。当我添加firstattempt> =(CURDATE() - INTERVAL 3 DAY)时,它开始返回false。如果没有WHERE子句中的那个,它确实返回行数。有什么想法吗?

function logip()
{
global $db;
global $user;
$ip = $_SERVER['REMOTE_ADDR'];
var_dump($ip);

$sql=$db->prepare('SELECT COUNT(failed) FROM logins WHERE firstattempt>=(CURDATE() - INTERVAL 3 DAY), ip=:ip');
$sql->execute(array(':ip'=>$ip));
$num=$sql->fetchColumn();

//$row=$sql->fetch();

var_dump($num);
    $sql=$db->prepare('INSERT INTO logins (ip, failed, firstattempt) VALUES (:ip, :failed, :firstattempt)');
    if ($user->authenticated())
        $sql->execute(array(':ip'=>$ip, ':failed'=>false, ':firstattempt'=>time()));
    else
        $sql->execute(array(':ip'=>$ip, ':failed'=>true, ':firstattempt'=>time()));
} 

1 个答案:

答案 0 :(得分:0)

使用DATE_SUB函数。

SELECT COUNT(failed) 
FROM   logins 
WHERE  firstattempt>=DATE_SUB(Curdate(), INTERVAL 3 DAY) 
       AND ip = :ip 

你的sql中有一些错误,

  1. 条件无法由,分隔。我认为它应该是AND