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

标签 php mysql sql datetime

我需要运行检查以确定过去 24 小时内是否将行插入到数据库中。无论我做什么,它总是返回说我已经创建了一行。 (是否将 INTERVAL 1 DAY 更改为 INTERVAL 1 Month、INTERVAL 1 Year、INTERVAL 1 Second 等)

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

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 之一的示例

最佳答案

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

我建议您仔细阅读文档,您需要的一切都在这里:http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

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

文档页面上的示例代码。


如果您仍然陷入困境,请查找您正在调用的方法。 http://php.net/manual/en/mysqli.prepare.php

成功则返回一个statement对象,否则返回false。

PHP 不是类型严格的 - 这意味着它会尝试“逻辑地”而不是“严格地”比较事物。一个对象是“true”(在您的条件语句中) - 因此它会打印出您所看到的内容。

对于调试,您可以简单地使用:

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

(或者如果您想认真的话,可以使用带有 NetBeans 断点和检查的 xdebug:https://netbeans.org/kb/docs/php/debugging.html

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

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

关于php - 使用 PHP/MySQL 检查过去 24 小时内是否插入了 MySQL 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32129750/

相关文章:

PHP/MySQL : Get name for specific ID

php - PHP 计算重复值

php - 从 Drupal 设置文件中获取数据库名称的正则表达式?

php - 如何查看我的脚本发送到 xampp 本地服务器的完整 sql 查询?

php - 是否总是需要在 foreach 之前使用 "is_array()"?

php - 将mysql html表导出到excel文件

php - 如何防止 PHP 中的 SQL 注入(inject)?

sql - 游标的 SELECT 列表中需要别名以避免重复的列名

sql - 如何在 PostgreSQL 中删除具有外键的多个表?

PHP MySQL 查询可能包含数据(如果存在)