1

抱歉,如果这已经回答了很多次,但我找不到答案,我很困惑。

我有一个 mysql 查询,当我在数据库中运行它时,它似乎输出了我想要的结果 - 但是当我通过 PHP 运行查询时,它没有正确输出。

在数据库中,日期存储如下:

2009-08-13T00:00:00

我想要做的不是显示早于今天日期的数据。因此,在 where 子句中是这样做的:

        WHERE dateField1 >= DATE_FORMAT(now(),'%Y-%m-%d') AND dateField2 >= DATE_FORMAT(now(),'%Y-%m-%d')

我的意图是去掉时间部分,因为我一直在努力寻找将 now() 的时间部分转换为午夜的方法。

当我在 PHPMyadmin 上运行它时,这似乎有效,但是当我运行 php 脚本时它却没有。

有任何想法吗?

非常感谢!

4

2 回答 2

1

当我在 PHPMyadmin 上运行它时,这似乎有效,但是当我运行 php 脚本时它却没有。

你没有使用类似sprintf的东西来构建字符串是吗?如果是这样,您需要%与另一个逃脱%

在任何情况下,您都可以使用该功能DATE()

WHERE `dateField1` > DATE(NOW())
于 2009-08-13T14:10:14.780 回答
0

尼克夫是对的。我同意这一点。

如果使用 sprintf() 函数进行 SQL 调用,您可以将查询变为:

  $query = sprintf("SELECT * FROM SOME_TABLE WHERE id=%s AND dateField1 >= DATE_FORMAT(now(),'%%Y-%%m-%%d') AND dateField2 >= DATE_FORMAT(now(),'%%Y-%%m-%%d')", $id);
//Then submit $query for SQL query processing...

PHP 在使用 sprintf() 时将 % 视为类型说明符。

为了避免这种情况,您需要在 MySQL 格式字符串前面再添加一个 %,即 %%Y 或 %%m 或 %%d。MySQL 查询的实际输出将再次变为 %Y 或 %m 或 %d。

于 2010-01-22T03:09:11.493 回答