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

使用PHP/MySQL检查是否在过去24小时内插入了MySQL行?,php,mysql,sql,datetime,Php,Mysql,Sql,Datetime,我需要运行一个检查,以确定是否在过去24小时内将一行插入数据库。不管我做什么,它总是说我已经创建了一行。(是否将间隔1天更改为间隔1个月、间隔1年、间隔1秒等) 有人能告诉我我做错了什么以及如何修复它吗?另外,你能提供的关于如何调试它的任何信息都是非常好的 if ($stmt = $mysqli->prepare( "SELECT * FROM votes WHERE id = " . $id . " AND cdate >= now() - INTERVAL 1 DAY")) {

我需要运行一个检查,以确定是否在过去24小时内将一行插入数据库。不管我做什么,它总是说我已经创建了一行。(是否将间隔1天更改为间隔1个月、间隔1年、间隔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\u TIMESTAMP
。下面是一个示例,其中一个值
2015-08-20 21:14:30

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

我建议您仔细阅读这些文档,您所需要的是:

具体来说,您需要了解如何执行准备好的查询(
$stmt
)以及如何检索结果集

文档页面上的示例代码


如果您仍然处于困境,请查找您正在调用的方法。

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

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

对于调试,您只需使用:

echo "<pre>"; var_dump($stmt);
echo”“;var_dump($stmt);
(或者,如果您想认真对待以下问题,请将xdebug与NetBeans的断点和检查一起使用:

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


如果您来自另一种语言,请告诉我,可能有人会给您一些提示,让您运行得更快。

如果您的
语句没有太多意义,因为您实际上没有计算任何内容,您只是准备了一条要执行的语句(但您也忘记了执行它)。假设SQL语句正常工作,这将执行结果并正确检查行数:

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

您没有执行查询

您可以尝试将其更改为:

$stmt ->execute();
执行它的方法是:


您也没有“准备”任何东西,所以只需使用
query
而不是
prepare
谢谢Tim。我尝试了您的代码,但在我将INTERVAL 1 DAY更改为INTERVAL 1 MONTH后,它一直显示“Row created…”。有什么想法吗?该行(表中只有一行)大约是在两个小时前创建的,因此如果我将间隔增加到一个月,它应该找不到任何行,正确吗?您能否回显
$query
并通过phpMyAdmin之类的程序运行它,以验证是PHP而不是SQL语句不起作用?尝试了您的建议,并且该行显示在phpMyAdmin中查询的结果中。你知道为什么吗?你在
$id
周围用引号了吗?请尝试
$query=“从id=”的投票中选择*”$身份证件“'和cdate>=now()-间隔1天”
$stmt ->execute();