Дата поиска php в другом формате

В моей текущей базе данных я использую формат даты гггг-мм-дд.
Если я хочу выполнить поиск по DOB, то должен использовать формат гггг-мм-дд, чтобы сопоставить его с форматом даты по умолчанию.

Есть ли способ поиска DOB из любого пользовательского ввода, будь то дд-мм-гггг или дд / мм / гггг или гггг-мм-дд и выдать результат???

$keyword = clean($keyword,1);

$result = $db->query("SELECT name, dob, email FROM user WHERE name LIKE '$keyword%' OR dob LIKE '$keyword%' OR email LIKE '$keyword%'");

if($result){
   //echoing the result
}

4 ответа

Решение

Не легко. Сначала преобразуйте введенные пользователем данные в правильный формат, а затем передайте их в запрос SQL.

Например:

if (preg_match('~([0-9]{2})[-/]([0-9]{2})[-/]([0-9]{4})~', $input, $matches)) {
    return $matches[3].'-'.$matches[2].'-'.$matches[1];
} else {
    return $input;
}

Вы можете сопоставить метки времени UNIX, например:

$timestamp = strtotime($date)
SELECT * WHERE UNIX_TIMESTAMP(dob) = '$timestamp'

Проверьте http://php.net/manual/en/function.strtotime.php для получения дополнительной информации о strtotime()

Это облегчит проверку в диапазоне дат.

Вы можете использовать strtotime для разбора практически любой (разумно отформатированной) даты на временную метку, и оттуда вы можете конвертировать в любой другой формат.

Например:

$yyyy_mm_dd = date('Y-m-d', strtotime('02/01/2012'));

Это довольно тяжелая функция процессора, хотя, strtotime так что будьте осторожны!

Да, вы должны нормализовать результат в PHP, прежде чем передавать его в ваш запрос SQL.

Ваш код может выглядеть примерно так...

$dateForSqlQuery = date('Y-m-d', strtotime($input));

...при условии, что strtotime() будет правильно обрабатывать эти изменения.

С другой стороны, вы должны разбить пользовательский ввод на отдельный день, месяц и год, а затем сгенерировать строку самостоятельно.

Другие вопросы по тегам