我有一个列名为db_datetime的表,其类型为datetime 日期在数据库中存储如下
对于搜索我使用日期选择器这个日期选择器的格式是这样的
09/19/2016 M/d/Y
我想在两个日期之间进行搜索,并使用下拉菜单搜索名称并搜索字符或数字
我使用这个代码,但问题是我使用STR_TO_DATE
的日期,但它没有给我一个结果我所有的努力没有成功总是给我没有搜索结果,我有一个日期存储为什么我搜索
这是代码
if(isset($_POST['submit'])) {
$search=mysqli_real_escape_string($conn,$_POST['txt_search']);
$q = array();
$sql = "";
if(isset($_POST['txt_name']) && !empty($_POST['txt_name'])){
$name = mysqli_real_escape_string($conn,$_POST['txt_name']);
$q[] = " db_name='".$name."' ";
}
if(isset($_POST['txt_psd']) && !empty($_POST['txt_psd'])){
$psd= mysqli_real_escape_string($conn,$_POST['txt_psd']);
$q[] = "STR_TO_DATE($psd, '%Y-%m-%d') like'%db_datetime%' ";
}
if(isset($_POST['txt_pdd']) && !empty($_POST['txt_pdd'])){
$pdd = mysqli_real_escape_string($conn,$_POST['txt_pdd']);
$q[] = "STR_TO_DATE($pdd, '%Y-%m-%d') like'%db_datetime%' ";
}
$qq=array();
if(isset($_POST['txt_search']) && !empty($_POST['txt_search'])){
$search = mysqli_real_escape_string($conn,$_POST['txt_search']);
$qq[] = "db_name like '%".$search."%' ";
$qq[] = "db_datetime like '%".$search."%' ";
$qq[] = "db_user like '%".$search."%' ";
}
$first = true;
$second=true;
foreach($q as $qu){
if($first){
$sql .= " where ".$qu;
$first = false;
}else{
$sql .= " and ".$qu;
}}
foreach($qq as $qu){
if($second){
$sql .= " where ".$qu;
$second = false;
}else{
$sql .= " or ".$qu;
}}
$result=mysqli_query($conn,"SELECT * FROM tbl_login {$sql}")or die(mysqli_error($conn));
答案 0 :(得分:2)
您可以将用户输入日期转换为PHP支持的Y-m-d
格式,然后将该日期传递给mysql。
被修改
$userInput = '09/19/2016';
$date = DateTime::createFromFormat('m/d/Y', $userInput);
$newDate = $date->format('Y-m-d');
echo $newDate; //output will be : 2016-09-19
答案 1 :(得分:0)
您对STR_TO_DATE函数的想法是错误的。显然,它需要输入日期格式,而不是输出(已知)。所以以下内容应该有效
STR_TO_DATE('$psd', '%m/%d/%Y') = db_datetime
请注意,您使用LIKE的想法也是错误的。