Я пытаюсь сделать SQL-запрос (из PHP) для извлечения данных в зависимости от даты. Моя база данных: id (int), name (text), date (datetime)
Я искал разные способы в Интернете и в stackoverflow и протестировал следующее:
SELECT * FROM myBase WHERE date BETWEEN $date1 AND $date2
а также
SELECT * FROM myBase WHERE DATEDIFF( date, $date2 )
но ни один из них не работает
мой полный код:
require 'connect.php'; // this connection works I can add element to the database
$date1 = new DateTime('2018/01/01 10:00:00');
$date2 = new DateTime('2019/01/01 10:00:00');
$sql = "SELECT * FROM myBase WHERE date BETWEEN $date1 AND $date2";
//$sql = "SELECT * FROM myBase WHERE DATEDIFF(date, $date2 )";
$req = $pdo->query($sql);
while($data = $req->fetch())
{
echo $data['id'];
echo" ";
}
Но это не работает: ничего не возвращается (конечно, в моей базе данных есть даты между date1 и date2).
Вы знаете, что не так?
SELECT * FROM myBase WHERE date BETWEEN $ date1 AND $ date2 разве этот оператор не возвращает никаких результатов непосредственно из базы данных?
вы заявляете, что сохраняете его как "bookingDate", но запрашиваете "дату". Если это первое, то ваш запрос должен сравнить bookingDate
@ Зайнул Абадин Тухин: ничего не возвращается
@nomistic: извините bookingDate - это не настоящее имя, это дата - я исправляю вопрос
получаете ли вы какие-либо результаты, когда выполняете запрос непосредственно в своей базе данных? Другими словами, SELECT * FROM myBase WHERE date BETWEEN '2018/01/01 10:00:00' AND '2019/01/01 10:00:00', и если это так, если он там работает, попробуйте то же самое в своем запросе на странице, передав ему фактические значения.
@Freddlow sqlfiddle.com/#!9/cfce1c/1 проверьте эту ссылку и не увидите разницы между вашим запросом и запросом на ссылку Think, теперь, если этот запрос сработал хорошо, то почему не ваш






Вы можете указать, что дата должна быть больше date1 и меньше date2:
SELECT * FROM myBase WHERE date >= $date1 AND date <= $date2
также, как правильно заявила Строберри, используйте этот код для безопасной вставки параметров:
$query = "SELECT * FROM myBase WHERE date >= :start AND date <= :end";
Итак, ваш код должен быть:
try{
$req= $db->prepare($query);
$result = $req->execute(array(
'start'=>$date1->format('Y-m-d'),
'end'=>$date2->format('Y-m-d')
));
$id_contratto = $db->lastInsertId();
}catch(PDOException $ex){
//handle errors here
}
while($data = $req->fetch())
{
echo $data['id'];
echo" ";
}
дает тот же результат
как дата определяется в вашей базе данных? Разве это не должно быть "bookingDate"?
Кроме того, вы должны отформатировать дату в формате MySql: $ date1-> format ('Y-m-d'), просто отредактировал мой ответ, чтобы отразить это
Тот же формат, что и date1 et date2. Я заполнил таблицу запросом типа $ sql = "INSERT INTO myBase VALUES ('John', 'Doe', 5, '2018/08/26 09:20:00', '2018/08/27 10:10:00 ') ";
это неправильный формат даты, вы должны вставить его как: 2018-08-26
и если у вас есть это [id (int), name (text), bookingDate (datetime)], почему ваш оператор вставки содержит две даты?
извините, у меня есть другие даты в моей базе данных, но я их еще не использую
Вы пытались исправить формат даты как 2018-08-26?
похоже, что запросы неверны
SELECT * FROM myBase WHERE bookingDate BETWEEN $date1 AND $date2";
или же
SELECT * FROM myBase WHERE DATEDIFF( BookingDate, $date2 ) > 0
тот же результат, ничего не вернулось
Нет проблем с вашим запросом, но с $ date1 и $ date2. $ Date1 и $ date2 просто сохраняются как строковый формат. $ date1 = '2018-01-01 10:00:00'; $ date2 = '2019-01-01 10:00:00';
Это делает ошибку. В моей таблице даты указаны в формате datetime
Да, в БД дата должна быть сохранена как datetime. Какой тип SQL вы используете? SQL-сервер, MySQL или ...? В чем ошибка? как выглядит окончательная строка запроса
Я использую MySQL (с PHPMyAdmin). Когда у меня возникает ошибка, моя страница PHP, которая выполняет запрос, не может отображаться
Как насчет обновления формата даты с помощью разделителя тире. Как SELECT * FROM myBase WHERE date BETWEEN '2018-01-01 10:00:00' AND '2019-01-01 10:00:00'
Хотя конкретная ошибка заключается в отсутствии кавычек, в более общем плане, написание запросов таким образом оставляет вас широко открытыми для внедрения sql. См. О параметризованных запросах