Откуда брать текущую дату для SQL запроса — из php или mysql?

Есть запросы, разного вида, где используется что-то вроде:
WHERE `date` = CURDATE()

вопрос, по скорости или по другим причинам не лучше ли использовать
$Date = (new DateTime())->format('Y-m-d');

WHERE `date` = $Date
  • Вопрос задан
  • 611 просмотров
Пригласить эксперта
Ответы на вопрос 3
XAKEPEHOK
@XAKEPEHOK
По производительности никакой разницы не будет, тут как вам удобнее, только если будете использовать второй вариант - используйте биндинги https://www.php.net/manual/ru/mysqli-stmt.bind-par... а еще лучше, использовать не голый mysqli, а какую-нибудь ORM

Что касается разницы между этими двумя способами, то она может проявляться в часовых поясах. Например, сервер mysql может иметь часовой пояс Владивостока, а в php у вас будет часовой пояс Москвы - тогда вы получите разные результаты. Этой проблемы можно избежать, если вы при инициализации приложения установите нужный часовой пояс и для сессии mysql, и в php

https://stackoverflow.com/questions/930900/how-do-...
https://www.php.net/manual/ru/function.date-defaul...
Ответ написан
@neol
Если вы 10 раз выполните запрос с CURDATE() (а тем более CURTIME()), то это будут немного разные запросы, возможно с разными результатами. В некоторых случаях нужно именно такое поведение, в некоторых лучше указать точное время. К примеру если нужно сделать выборку большого набора данных по кускам (chunk), то лучше использовать второй вариант.
Ответ написан
Комментировать
@v__V__v
Разработчик
Если по скорости, то однозначно CURDATE()/NOW()/CURTIME() - в этом случае вы просто передаете строковую константу в запросе (кто скажет, что это не строковая константа - ничего не понимает в программировании), во втором - сначала создается объект со всеми накладными расходами, потом вызывается его метод, который возвращает результат, который помещается в переменную, который потом из нее извлекается и подставляется в запрос, который после кучи лишних телодвижений уходит наконец в СУБД. А php - это все-таки не бинарный код, несмотря на все ухищрения разработчиков. А в первом случае всего этого нет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы