2016-09-28 56 views
0

我有一个列名的表是db_datetime类型为datetime 的日期存储这样的数据库2个日期之间的搜索与不同的格式

enter image description here

对我使用日期搜索选取器这个日期选择器的格式是这样

09/19/2016 M/d/Y 

我想两个日期之间的搜索和一个下拉菜单上的名称进行搜索,并在字符或数字 搜索我使用这款C颂歌,但问题是与我使用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

重新格式化日期,以便它与MySQL的兼容。如果日期选择器没有这种内置功能,我不会感到惊讶 – James111

+0

尝试这样: \t'$ dte = str_replace('/',' - ',$ post_data ['date']); \t $ dt = new DateTime(); $ date = $ dt-> createFromFormat('d-m-Y',$ dte); ('Y-m-d');' 我有一个类似的问题,用你的替换瓦尔。 –

+0

@ James111我如何重新格式化日期? – mhmd

回答

2

您可以将用户输入日期转换为MySQL支持的Y-m-d格式,然后将该日期传递给mysql。

Edited

$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 
+0

if(isset($ _ POST ['txt_psd'])&&!空($ _ POST ['txt_psd'])){$ {sd = mysqli_real_escape_string($ conn,$ _ POST ['txt_psd']); $ userInput = $ psd; $ date = DateTime :: createFromFormat('m/d/Y',$ userInput); $ q [] =“db_datetime = $ date”; }我使用你的代码,但它给了我,可捕捉的致命错误:类DateTime的对象无法转换为字符串 – mhmd

+0

@mhmd:我已更新我的代码,请检查它,我刚刚分配一个日期变量,并通过测试'is_string'函数返回true。所以现在你不会得到提及的错误。 –

+0

那我打印的SQL哪里db_datetime = 2016-09-19没有结果。这是代码if(isset($ _ POST ['txt_psd'])&&!empty($ _ POST ['txt_psd'])){0} $ userInput = $ psd; $ date = DateTime :: createFromFormat('m/d/Y',$ userInput); $ newDate = $ date-> format('Y-m-d'); echo $ newDate; $ q [] =“db_datetime = $ newDate”; – mhmd

0

您对STR_TO_DATE函数的想法是错误的。很明显,它需要输入日期格式,而不是输出(已知)。所以下面应该工作

STR_TO_DATE('$psd', '%m/%d/%Y') = db_datetime 

请注意,您使用LIKE的想法也是错误的。

+0

没有工作,我尝试你的解决方案和这个解决方案STR_TO_DATE('$ psd','%Y /%m /%d')= db_datetime和这个解决方案STR_TO_DATE('$ psd','%Y-%M- %d')= db_datetime – mhmd

+0

为什么地球上会尝试'%Y-%M-%d'格式?它如何与你的09/19/2016日期有关? –

+0

顺便说一下,它应该更低。 –