PHP-MySQLi查询中的问题-时间戳

我的查询有问题.

数据库中的字段(用户标识,代码,时间戳)

我想在此代码中验证是否存在一个用户ID和相应的代码,但已插入的时间少于一天,否则显示消息“链接已过期”

我的代码在没有此行TIMESTAMPDIFF(DAY,CURTIME(),timestamp)<的情况下运行良好. 1“). 目前,时间戳条件不返回任何内容

"select userid, code from password_reset  where userid=? and code=? and TIMESTAMPDIFF(DAY, CURTIME(), timestamp) < 1"

这段代码有问题吗?基本上,我的想法是:如果时间戳超过一天,则向用户返回错误.

我的脚本(问题仅出在查询的时间戳条件下)

if (checkBd ($sql, $db, $user, $codePass)){
            $user = (int)mysqli_real_escape_string($db, $userid);
            $codePass = mysqli_real_escape_string($db, $_GET['code']);

            ($sql = $db->prepare("select userid, code from password_reset  where userid=? and code=? and TIMESTAMPDIFF(DAY, CURTIME(), timestamp) < 1"));

            $sql->bind_param('ss', $user, $codePass);

            $sql->execute();

            $sql->bind_result($user, $codePass);

            if ($sql->fetch()) {
                    $_SESSION['u_name']= sha1($user);
                    header("location: updatePass.php");
                    return true;
            }

    }
            $sql->close();
    $db->close();

解决方法:

您想传递一个DATETIME值,而不只是一个TIME,使用NOW()而不是CURTIME(). (如果要忽略一天中的时间,请使用CURDATE().

同样,颠倒参数顺序,就像函数执行datetime2-datetime1一样.

有关更多详细信息,请参见documentation.

TIMESTAMPDIFF(DAY, `timestamp`, NOW()) < 1

为列名使用保留字也无济于事.

上一篇:WooYun-2016-199433 phpmyadmin 反序列化漏洞


下一篇:PHP使用LIMIT和OFFSET以及ORDER BY id从数据库检索记录