使用PHP / MySQL检查过去24小时内是否插入了MySQL行?

时间:2015-08-20 22:53:01

标签: php mysql sql datetime

我需要运行检查以确定在过去24小时内是否有一行插入数据库。不管我做什么,它总是回来说我已经创建了一行。 (我是否将INTERVAL 1天更改为INTERVAL 1个月,INTERVAL 1年,INTERVAL 1秒等)

有人可以告诉我我做错了什么以及如何解决这个问题?此外,您可以提供有关如何调试此信息的任何信息都很棒。

if ($stmt = $mysqli->prepare( "SELECT * FROM votes WHERE id = " . $id . " AND cdate >= now() - INTERVAL 1 DAY")) {
  echo 'Row created within the last 24 hours';
} else {
  echo 'Row not created within the last 24 hours';
}

数据库表包含cdate列,设置为DATETIME,默认值为CURRENT_TIMESTAMP。以下是其中一个值2015-08-20 21:14:30

的示例

3 个答案:

答案 0 :(得分:2)

$stmt是语句对象,而不是查询的结果。 (您已准备好查询但尚未执行。)

我建议您仔细阅读文档,所有您需要的就是:http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

具体而言,您正在寻找如何执行准备好的查询($stmt)以及如何检索结果集。

文档页面上的示例代码。

如果您仍然处于困境,请查看您要拨打的方法。 http://php.net/manual/en/mysqli.prepare.php

它的返回结果是成功时的语句对象 - 否则为false。

PHP不是严格的类型 - 意味着它会尝试比较事物"逻辑上"而不是"严格"。一个对象是" true" (在你的条件陈述中) - 因此它打印出你看到的内容。

对于调试,您只需使用:

echo "<pre>"; var_dump($stmt);

(或者如果你想认真对待,请使用xdebug和NetBeans&#39;断点和检查:https://netbeans.org/kb/docs/php/debugging.html

这将输出变量的详细信息 - 这可能会有所帮助。

如果您来自其他语言,请告诉我,有人可能会提示您让您跑得更快。 :)

答案 1 :(得分:1)

您的if声明并没有多大意义,因为您实际上并没有评估任何内容,您只是准备要执行的声明(但您也忘了执行它)。假设您的SQL语句有效,这将执行结果并正确检查行数:

<?php
    $query = "SELECT * FROM votes WHERE id = " . $id . " AND cdate >= now() - INTERVAL 1 DAY";
    if ($stmt = $mysqli->prepare($query)) {

        /* execute query */
        $stmt->execute();

        /* store result */
        $stmt->store_result();

        $num_rows = $stmt->num_rows;

        if ($num_rows > 0) {
            echo 'Row created within the last 24 hours';
        } else {
            echo 'Row not created within the last 24 hours';
        }

        /* close statement */
        $stmt->close();
    }
?>

答案 2 :(得分:0)

您没有执行查询!

您可以尝试将其更改为:

$response = $mysqli->query("...");

执行它是:

$stmt ->execute();