php/mysql — date_format и часть времени
-
13-09-2019 - |
Вопрос
Извините, если на этот вопрос уже отвечали много раз, но я не смог найти ответ и был сбит с толку.
У меня есть запрос 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.