【问题标题】:Mysql statement for finding events in the last day查找最后一天事件的mysql语句
【发布时间】:2012-03-15 05:47:31
【问题描述】:

我正在尝试获取一个 mysql PDO 语句来选择最后一天发生的所有失败登录。我的表有 4 列...id(只是自动递增以创建不同的条目)、ip(字符 15)、失败(布尔值)、第一次尝试(时间戳)。当我添加 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()));
} 

【问题讨论】:

  • 最好把php作为你的问题的标签。

标签: php mysql


【解决方案1】:

使用 DATE_SUB 函数。

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

你的sql有一些错误,

  1. WHERE 条件不能用, 分隔。我想应该是AND

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-08
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2018-12-06
    • 2013-05-14
    相关资源
    最近更新 更多