Дата поиска 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()
будет правильно обрабатывать эти изменения.
С другой стороны, вы должны разбить пользовательский ввод на отдельный день, месяц и год, а затем сгенерировать строку самостоятельно.