Причина, по которой этот запрос:
SELECT * FROM events WHERE event_date >= NOW()
... возвращает записи из будущего, потому что NOW () включает время и дату. И эта часть времени указывает время, когда оператор [функция или запуск] начал выполняться. Таким образом, это означает, что начало дня в типе данных DATETIME выглядит следующим образом: 2010-06-24 00:00:00
(ГГГГ-ММ-ДД ЧЧ: ММ: СС, с точностью до микросекунды), которое при NOW () будет отображать что-то вроде 2010-06-24 14:24:31
...
Вот ваши варианты:
SELECT * FROM events WHERE event_date >= DATE(NOW())
SELECT * FROM events WHERE event_date >= DATE(CURRENT_TIMESTAMP)
SELECT * FROM events WHERE event_date >= CURRENT_DATE()
SELECT * FROM events WHERE event_date >= CURRDATE()