Вопрос

Извините, если на этот вопрос уже отвечали много раз, но я не смог найти ответ и был сбит с толку.

У меня есть запрос 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, это не так.

Есть идеи?

Большое спасибо!

Это было полезно?

Решение

Кажется, это работает, когда я запускаю его на PHPMyadmin, но когда я запускаю скрипт php, это не так.

Вы не используете что-то вроде sprintf построить строку, а ты?Если да, то вам нужно избежать % с другим %

В любом случае вы можете использовать функцию DATE()

WHERE `dateField1` > DATE(NOW())

Другие советы

Никф прав.Я согласен с этим.

В случае использования функции 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top