在我目前的数据库中,我使用日期格式 yyyy-mm-dd 如果我想通过DOB搜索,则必须使用格式yyyy-mm-dd将其与默认日期格式匹配。
有没有办法从dd-mm-yyyy或dd / mm / yyyy或yyyy-mm-dd的任何用户输入中搜索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
}
答案 0 :(得分:2)
不容易。首先将用户输入转换为正确的格式,然后再将其传递给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;
}
答案 1 :(得分:2)
您可以匹配UNIX时间戳,例如:
$timestamp = strtotime($date)
SELECT * WHERE UNIX_TIMESTAMP(dob) = '$timestamp'
查看http://php.net/manual/en/function.strtotime.php以获取有关strtotime()
这样可以更方便地在日期范围内进行检查。
答案 2 :(得分:1)
是的,您应该在将结果传递给SQL查询之前对PHP中的结果进行规范化。
您的代码可能看起来像这样......
$dateForSqlQuery = date('Y-m-d', strtotime($input));
...假设strtotime()
将正确处理这些变化。
另一方面,您应该将用户输入分解为单独的日,月和年输入,然后自己生成字符串。
答案 3 :(得分:1)
您可以使用strtotime将几乎任何(格式合理的)日期解析为时间戳,然后您可以转换为任何其他格式。
例如:
$yyyy_mm_dd = date('Y-m-d', strtotime('02/01/2012'));
虽然这是一个非常重要的处理器功能,strtotime
,所以一定要保留!