Php mySQL在过去24小时和60分钟内获取帖子的尝试失败

Php mySQL在过去24小时和60分钟内获取帖子的尝试失败,php,mysql,datetime,range,Php,Mysql,Datetime,Range,好的,编辑这个 SELECT * FROM votelog WHERE ipaddress = '127.0.0.1' AND datevoted BETWEEN DATE_SUB( CURDATE( ) , INTERVAL 24 HOUR ) AND CURDATE( ) LIMIT 0 , 30 这就是我在过去24小时内试图运行的查询的一个例子。在过去的60分钟里,我还为不同的需求单独运行了一个。问题是我正在测试的表中至少有4行,其中3行属于24小时条款 编辑 好吧,我解决了我的问题,我

好的,编辑这个

SELECT *
FROM votelog
WHERE ipaddress = '127.0.0.1'
AND datevoted
BETWEEN DATE_SUB( CURDATE( ) , INTERVAL 24 HOUR )
AND CURDATE( )
LIMIT 0 , 30
这就是我在过去24小时内试图运行的查询的一个例子。在过去的60分钟里,我还为不同的需求单独运行了一个。问题是我正在测试的表中至少有4行,其中3行属于24小时条款

编辑 好吧,我解决了我的问题,我真的很累。。2.使用介于和日期之间的子项。。直到现在我才明白,我应该用col的名字,在这里我有CURDATE()来回答我自己下面的问题

这就是数据库中的时间戳,标准日期时间。。2011-09-01 13:20:08

尽管如此,我还是没有结果

$query = "SELECT * FROM votelog WHERE ID=".(int)$_GET['id']." AND ipaddress='".mysql_real_escape_string(getRealIpAddr())."' AND datevoted > DATE_SUB(CURDATE(), INTERVAL 24 hour)";
编辑:由于ID不是字符串类型,所以不使用
mysql\u real\u escape\u字符串($\u GET['ID'])
,只需使用
(int)$\u GET['ID']


已编辑:由于ID不是字符串类型,因此不使用
mysql\u real\u escape\u string($\u GET['ID'])
,只需使用
(int)$\u GET['ID']

您没有正确地在两者之间使用,正确的语法是:

expr在最小值和最大值之间

您应该将查询的结尾更改为:

...BETWEEN DATE_SUB(CURDATE(), INTERVAL 24 hour) AND CURDATE()

或者使用
运算符。

如果您没有正确使用BETWEEN,正确的语法是:

expr在最小值和最大值之间

您应该将查询的结尾更改为:

...BETWEEN DATE_SUB(CURDATE(), INTERVAL 24 hour) AND CURDATE()

或者使用
操作符。

您试过这个吗?在之间的
需要一个
你知道

$query = "SELECT * FROM votelog WHERE ID=".mysql_real_escape_string($_GET['id'])." AND ipaddress='".mysql_real_escape_string(getRealIpAddr())."' AND datevoted BETWEEN DATE_SUB(CURDATE(), INTERVAL 24 HOUR) AND DATE_SUB(CURDATE(), INTERVAL 60 MINUTE)"; 
我想你可以一直这样做

 $query = "SELECT * FROM votelog WHERE ID=".mysql_real_escape_string($_GET['id'])." AND ipaddress='".mysql_real_escape_string(getRealIpAddr())."' AND datevoted >= DATE_SUB(CURDATE(), INTERVAL 24 HOUR) AND datevoted <= DATE_SUB(CURDATE(), INTERVAL 60 MINUTE)"; 

$query=“SELECT*FROM votelog WHERE ID=”.mysql\u real\u escape\u string($\u GET['ID'])和ipaddress=”.mysql\u real\u escape\u string(getRealIpAddr())。”和datevoted>=DATE\u SUB(CURDATE(),INTERVAL 24小时)和datevoted您试过吗?
之间的
需要
您知道

$query = "SELECT * FROM votelog WHERE ID=".mysql_real_escape_string($_GET['id'])." AND ipaddress='".mysql_real_escape_string(getRealIpAddr())."' AND datevoted BETWEEN DATE_SUB(CURDATE(), INTERVAL 24 HOUR) AND DATE_SUB(CURDATE(), INTERVAL 60 MINUTE)"; 
我想你可以一直这样做

 $query = "SELECT * FROM votelog WHERE ID=".mysql_real_escape_string($_GET['id'])." AND ipaddress='".mysql_real_escape_string(getRealIpAddr())."' AND datevoted >= DATE_SUB(CURDATE(), INTERVAL 24 HOUR) AND datevoted <= DATE_SUB(CURDATE(), INTERVAL 60 MINUTE)"; 
$query=“SELECT*FROM votelog WHERE ID=“.mysql\u real\u escape\u string($\u GET['ID'])”和ipaddress=”。mysql\u real\u escape\u string(getRealIpAddr())。”和datevoted>=DATE\u SUB(CURDATE(),INTERVAL 24小时)和datevoted
所以在看了很多之后,这是我的结果。。。我现在觉得很脏


所以在看了很多之后,这是我的结果。。。我现在觉得很脏

您可能没有日期,但有一个datetime字段(或者时间戳,这略有不同)。不要使用
CURDATE()
。在查询中,
CURDATE()
给出了
2011-09-03
(一个日期!),当它与日期时间字段进行比较时,它被视为
2011-09-03 00:00
(午夜!),因此您的查询(如果今天运行)与以下内容相同:

因此,同:

SELECT *
FROM votelog
WHERE ipaddress = '127.0.0.1'
AND datevoted
BETWEEN `2011-09-02 00:00:00` AND `2011-09-03 00:00:00`
LIMIT 0 , 30
这就是为什么你会丢失从午夜到现在的所有记录


立即使用
NOW()

有用的阅读资料:

MySQL文档:

MySQL文档:


所以问题:

您可能没有日期,但有一个datetime字段(或者时间戳,这有点不同)。不要使用
CURDATE()
。在查询中,
CURDATE()
给出了
2011-09-03
(一个日期!),当它与日期时间字段进行比较时,它被视为
2011-09-03 00:00
(午夜!),因此您的查询(如果今天运行)与以下内容相同:

因此,同:

SELECT *
FROM votelog
WHERE ipaddress = '127.0.0.1'
AND datevoted
BETWEEN `2011-09-02 00:00:00` AND `2011-09-03 00:00:00`
LIMIT 0 , 30
这就是为什么你会丢失从午夜到现在的所有记录


立即使用
NOW()

有用的阅读资料:

MySQL文档:

MySQL文档:


所以问题:

我会使用PDO(或MySQLi)来准备语句,它通常会使它们更可读(与答案无关,但仍然很好知道),您能格式化您的代码以使其他人可读吗?谢谢,我还读了一些关于防止SQL注入的可靠文章。@Col,根据你的评论,除了告诉我需要去读一本书或其他东西之外,没有人支持你的说法。我想你真的需要读一本书,一些网站,等等。。关于编码你自己。不要假设一行代码中包装这些查询的代码没有采取措施来防止注入。你也可以假设我在开发机器上,而不是生产机器上。。但是,如果你对任何事情都没有帮助,为什么要用你不支持的琐碎评论来烦扰人们呢?不需要借口。我不是在指责你:)我只是想帮忙。但你可以随心所欲。我会使用PDO(或MySQLi)来准备语句,这通常会使它们更具可读性(与答案无关,但仍然很好知道),您能格式化您的代码以使其他人可读吗?谢谢,我还读了一些关于防止SQL注入的可靠文章。@Col,根据你的评论,除了告诉我需要去读一本书或其他东西之外,没有人支持你的说法。我想你真的需要读一本书,一些网站,等等。。关于编码你自己。不要假设一行代码中包装这些查询的代码没有采取措施来防止注入。你也可以假设我在开发机器上,而不是生产机器上。。但是,如果你对任何事情都没有帮助,为什么要用你不支持的琐碎评论来烦扰人们呢?不需要借口。我不是在指责你:)我只是想帮忙。但你可以随心所欲。保留此注入完整:)@Col SQL注入在哪里?@Col详细说明,而不是指出您发现的明显内容?@Col哈哈…,您的意思是当没有mysql连接时?我只是复制了OP的代码,并对这个问题进行了一些编辑。SQL注入是另一个问题。一个经典的例子-
id=1或1=1
@Col除非你暗示SQL注入唯一安全的代码是使用准备好的语句,否则我无法理解为什么代码会像你暗示的那样不安全。而不仅仅是粘贴