Сравнение дат в MySQL с использованием PDO (PHP) не работает в формате ГГГГ-мм-дд - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь получить записи между двумя датами, используя MySQL и PDO PHP.

SELECT * FROM tripTable AS trip
WHERE trip.travelDate BETWEEN :startDate AND :endDate

Это не работает при использовании $ _ POST переменные даты 1970-01-01 и 2099-01-01 , но работают, когда я преобразую их в переменные в 19700101 и 20990101 соответственно.

travelDate сохраняется в формате даты.

:startDate - 1970-01-01 и :endDate - 2099-01-01

Пример PHP Код

$startDate = $_POST["startdate"];
$endDate = $_POST["enddate"];

$stmt = $dbh->prepare(/*above query*/);
$stmt->bindValue(":startDate", $startDate, PDO::PARAM_STR);
$stmt->bindValue(":endDate", $endDate, PDO::PARAM_STR);
$stmt->execute();
var_dump($stmt->fetchAll(PDO::FETCH_ASSOC))

Почему это так и есть ли способ исправить это в моем запросе SQL?

Я проверяю запрос с помощью PhpStorm Встроенная консоль запросов 2019.3.4

Ответы [ 2 ]

3 голосов
/ 28 апреля 2020

Вам необходимо заключить ваше значение в кавычки при выполнении запроса с параметрами.

enter image description here

Фактическое SQL, которое выполняется (вы можете обратите внимание, что на вкладке «Вывод» вашей консоли запросов к БД см. 2-й снимок экрана):

SELECT * FROM events
WHERE created_at >= '2019-04-25'

Если вы их опустите, то будет выполняться так, что неправильно:

SELECT * FROM events
WHERE created_at >= 2019-04-25

Вы можете увидеть, сколько результатов получено всеми тремя способами (в таблице 13 строк, правильный запрос должен возвращать только 11 строк):

enter image description here

0 голосов
/ 28 апреля 2020

Я не уверен, в чем проблема, но я снова протестировал ее вне консоли запросов PHPStorm, и, похоже, она работает за пределами консоли. Похоже, что PHPStorm требует, чтобы даты типа PDO были записаны как ГГГГммдд ТОЛЬКО

...