Php 正确搜索数据

Php 正确搜索数据,php,sql,Php,Sql,我已经写了一个搜索表数据的代码。我为搜索提供了多列。但当我只搜索单个列时,时间结果是不正确的。 屏幕截图: 查询如下: SELECT * FROM file WHERE letter = "daak" OR department = "" OR officer = "" OR DATE BETWEEN "" AND "" ORDER BY DATE 当我搜索daak时,它显示所有字母 { $condition = 'lette

我已经写了一个搜索表数据的代码。我为搜索提供了多列。但当我只搜索单个列时,时间结果是不正确的。 屏幕截图:

查询如下:

SELECT
    * 
FROM
    file 
WHERE
    letter = "daak" 
    OR department = "" 
    OR officer = ""
    OR DATE BETWEEN "" AND "" 
ORDER BY
    DATE
当我搜索daak时,它显示所有字母

{
 $condition = 'letter ="'.$letter.'" or department = "'.$dept.'" or officer = "'.$officer.'"or date between "'.$fdate.'" and "'.$todate.'" order by date';
          $result =$qgen->select('file','*',$condition);
}
我认为您需要在查询中使用STR_to_DATE mysql内置函数:

SELECT
    * 
FROM
    file 
WHERE
    letter = 'daak'
    OR department = '' 
    OR officer = ''
    OR DATE BETWEEN STR_TO_DATE('10/09/2018','%d/%m/%Y')AND STR_TO_DATE('12/09/2018','%d/%m/%Y') 
ORDER BY
    DATE
在php代码中:

$condition = 'letter ="'.$letter.'" or department = "'.$dept.'" or officer = "'.$officer.'"or date between "STR_TO_DATE('.$fdate.', '%d/%m/%Y')" and "STR_TO_DATE('.$todate.', '%d/%m/%Y')" order by date';
          $result =$qgen->select('file','*',$condition);

如果只想获得满足所有条件的行,则使用“and”,而不是“or”

“A和B”表示“仅A和B所在的行,不包括任何其他行” “A或B”表示“B所在的所有行以及A所在的所有行” 因此,您的查询应该是

select * from file where letter ="daak" AND department = "" AND officer
= "" AND date between "" and "" order by date
如果您想忽略空的输入字段,那么

{

 $condArray = array();

 if(trim($letter)) $condArray[] = 'letter = "'.$letter.'"';
 if(trim($dept)) $condArray[] = 'department = "'.$dept.'"';
 if(trim($officer)) $condArray[] = 'officer = "'.$officer.'"'
 if(trim($fdate) or trim($todate)) $condArray[] = 'date between "'.$fdate.'" and "'.$todate.'"';

 $condition = implode(' AND ', $condArray).' order by date';

 $result =$qgen->select('file','*',$condition);
}

您是否有任何错误或结果本身不正确?如果结果不正确,如果所选日期没有数据,您是否检查了日期。您应该检查并验证每个变量,并且仅在变量具有有效值时添加条件。并使用prepared statement.echo变量$condition确保查询显示正确的值