0

我有一个这样的mysql查询

SELECT s.end_date_time AS Finishtime
FROM auctions_search AS s
WHERE end_date_time >NOW() + INTERVAL 3 HOUR;

所以我需要把它放到php中我试试这样

$aToday = date("Y-m-d H:i:s"); 

$aExpireAuctionTime = DBC::$slave->selectAssoc("
    SELECT 
        s.end_date_time AS FinisDate
    FROM
        {$this->sDBName_Auction}.{$this->sTBLName_Auctions_Search}  AS s
    WHERE
        s.end_date_time >{$aToday} + INTERVAL 3 HOUR
");

但给我错误

“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,了解在 '08:53:24 + INTERVAL 3 HOUR' 附近使用的正确语法

end_date_time列存储商店上列出的项目的结束日期

所以我需要选择一个结束不超过+3的项目

例如,我们有结束的记录

  1. 2013-08-15 09:51:38
  2. 2013-08-15 10:56:40
  3. 2013-08-29 18:56:00
  4. 2013-08-19 12:56:32

当前时间是 2013-08-15 08:51:38

所以我需要选择

  1. 2013-08-29 18:56:00
  2. 2013-08-19 12:56:32

因为另一个将在 3 小时后完成

也许查询应该我喜欢

select
    s.end_date_time
from
    auctions_search AS s
where
    true
    and s.start_date_time <= 3  
4

3 回答 3

1

我想你需要附上你的日期值:

WHERE s.end_date_time >'{$aToday}' + INTERVAL 3 HOUR

请注意,直接将值传递到 SQL 查询(即不转义它们)是一个坏主意。

于 2013-08-14T07:36:37.413 回答
1

PHP 和 SQL 是不同的语言。您正在使用 PHP 编写 SQL 代码。MySQL 服务器不会看到您的 PHP 代码,只会看到您生成的 SQL 代码。如果将其分配给变量并打印它,您可以看看:

<?php

$aToday = date("Y-m-d H:i:s"); 

$sql = "
    SELECT 
        s.end_date_time AS FinisDate
    FROM
        {$this->sDBName_Auction}.{$this->sTBLName_Auctions_Search}  AS s
    WHERE
        s.end_date_time >{$aToday} + INTERVAL 3 HOUR
";

var_dump($sql);

该代码应该在您的 MySQL 客户端中完美运行,但它不会因为它包含以下内容:

s.end_date_time >2013-08-14 10:19:22 + INTERVAL 3 HOUR

这显然是无效的 SQL。请比较:

mysql> SELECT 2013-08-14 10:19:22;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '10:19:22' at line 1
mysql> SELECT '2013-08-14 10:19:22';
+---------------------+
| 2013-08-14 10:19:22 |
+---------------------+
| 2013-08-14 10:19:22 |
+---------------------+
1 row in set (0.00 sec)

作为如何防止 PHP 中的 SQL 注入?解释说,您通常不需要在 SQL 代码中注入原始输入(除非您使用的是真正过时的数据库库)。这就是准备好的语句的用途。

最后但同样重要的是,除非您尝试为结果缓存生成静态查询,否则您可以简单地使用NOW()orCURRENT_TIMESTAMP作为“当前日期”的同义词。无需在 PHP 中计算。

于 2013-08-14T08:24:45.427 回答
1

您可以使用 DATE_FORMAT() 函数处理 NOW() 记录。然后您可以减去(天)/(月)/(年)并进行查询。

于 2013-08-14T07:56:08.497 回答