使用PHP/MySQL检查是否在过去24小时内插入了MySQL行?
我需要运行一个检查,以确定是否在过去24小时内将一行插入数据库。不管我做什么,它总是说我已经创建了一行。(是否将间隔1天更改为间隔1个月、间隔1年、间隔1秒等) 有人能告诉我我做错了什么以及如何修复它吗?另外,你能提供的关于如何调试它的任何信息都是非常好的使用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")) {
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();