Использование BETWEEN для дат, хранящихся в виде строки в MySQL

0

Поле даты в таблицах базы данных, над которыми я сейчас работаю, находится в форме varchar и дано в формате dd.mm.yyyy.

Например дата: 03.02.2018

Существует экран выше

Изображение 174551

Поэтому, когда я отправляю данные с помощью ajax, вы работаете неправильно.

Есть код ниже

function clean($data) {
    global $con;
    $data = mysqli_real_escape_string($con, strip_tags($data));
    return $data;
}
$start_date = clean($_POST['start']);
$end_date   = clean($_POST['end']);

if (isset($start_date) && isset($end_date)) {
    $get_date = "SELECT * FROM records WHERE reservations BETWEEN '$start_date' AND '$end_date' ";
}

Дата начала и дата окончания такие же, например, сегодня или вчера. Но когда даты разные, не работают, например, дата начала: 03.02.2018 дата окончания: 03.03.2018

С уважением

Спасибо.

  • 0
    Это не фактическое поле date в базе данных, не так ли? MySQL хранит даты в формате: YYYY-MM-DD .
  • 1
    Вы не можете использовать BETWEEN для типа столбца varchar в MySQL, вам нужен обходной путь.
Показать ещё 2 комментария
Теги:
date

2 ответа

3

Вы решите эту проблему и другие проблемы в будущем, если вы используете тип столбца DATE а не varchar. Это позволит использовать функции даты в MySQL.

Если по какой-то причине вы не можете или не хотите, чтобы вам нужно было преобразовать столбец в дату, прежде чем делать BETWEEN:

SELECT * FROM records 
WHERE STR_TO_DATE(reservations,'%d.%m.%Y') 
BETWEEN '$start_date' AND '$end_date';--Don't use variables directly

Кроме того, вы не хотите использовать исходные данные в запросе базы данных. Злоумышленник может отправить SQL в вашу базу данных и нанести урон.

Лучше использовать экранирование или даже лучше настраивать пользовательские запросы. На этом сайте есть вопросы, которые могут помочь в этом.

  • 0
    Это хорошее решение для этого случая, хотя следует избегать сохранения даты в виде строки в дБ, если это возможно на первом месте.
  • 0
    Хорошо, спасибо, Джим за помощь.
Показать ещё 2 комментария
0

В вашем SQL-запросе используется таблица "резервирование", но на изображениях вы используете "rezervasyon_tarihi". Возможно, это должно быть "SELECT * FROM records WHERE rezervasyon_tarihi BETWEEN '$ start_date' AND '$ end_date'";

И поэтому, я думаю, эта тема поможет вам SQL Между предложением со строками столбцов

  • 0
    Хорошо, спасибо за ваше предложение. Я знаю, что есть аналогичные ситуации столбца. Но сейчас я не работаю над колонкой картинок. Еще раз спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню