簡體   English   中英

在2種格式不同的日期之間搜索

[英]Search between 2 dates with different format

我有一個表,其列名稱為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));

您可以按照PHP在MySQL中支持的方式將用戶輸入日期轉換為Ymd格式,然后將該日期傳遞到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

您對STR_TO_DATE函數的想法是錯誤的。 顯然,它需要輸入日期格式,而不是輸出日期(已知)。 所以以下應該工作

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

請注意,您使用LIKE的想法也是錯誤的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM