Select 在同一mysqli语句中使用like和=

Select 在同一mysqli语句中使用like和=,select,mysqli,prepared-statement,sql-like,Select,Mysqli,Prepared Statement,Sql Like,在mysqli准备的声明中,我在获得期望的结果方面遇到了问题。我在where条件下同时使用like和= //我的搜索变量 $a = "%{$_REQUEST['a']}%"; $b = "%{$_REQUEST['b']}%"; $search_from_date = $_REQUEST['from_date']; $search_to_date = $_REQUEST['to_date']; //我的查询 $q = $mysqli->prepare("SELECT t1.* from

在mysqli准备的声明中,我在获得期望的结果方面遇到了问题。我在where条件下同时使用like和=

//我的搜索变量

$a = "%{$_REQUEST['a']}%";
$b = "%{$_REQUEST['b']}%";
$search_from_date = $_REQUEST['from_date'];
$search_to_date = $_REQUEST['to_date'];
//我的查询

$q = $mysqli->prepare("SELECT t1.* from table1 t1 where (t1.a like ? and t1.b like ?) and (date(last_updated) between ? and ?) limit ".$start.','.$per_page);

$q->bind_param('ssss',$a,$b,$search_from_date,$search_to_date);
如果搜索时考虑了日期,我就无法得到结果。如果我从语句中删除日期,在其他字段上搜索效果会很好

告诉我如果没有搜索条件的输入,如何从语句中删除搜索条件本身。我的意思是,如果未指定截止日期,则查询应将该列替换为1


通过这样做,即使没有指定搜索条件,我也会得到默认的30行。

日期格式很有可能是不兼容的。许多数据库使用本机ISO 8601日期(yyyy-mm-dd)。您能确保您的请求日期格式正确吗?

您应该为开始和每页变量使用占位符,谢谢您的帮助,这将更新请求日期。如果没有搜索条件的输入,请告诉我如何从语句中删除搜索条件本身。我的意思是,如果未指定to_date,则查询应将该列替换为1。您可以使用字符串作为查询,并在PHP(或等效语言)中使用if语句,在WHERE子句中选择性地添加and术语。一旦你的字符串完成了,你就可以使用它了。@Chrisky其实没那么简单。对于未知数量的占位符,您可以使用call user func Stuff。如果您使用绑定功能并具有占位符,那么您确实需要巧妙地填充这些占位符。然而,如果您连接格式良好的术语来构造SQL,您就可以成功地完成这类工作。另一种方法是:使用一些“SkipDateTerm”布尔参数,然后在SQL中使用:
和(?=1或时间戳介于?和?
之间,然后绑定到
SkipDateTerm
FromDate
ToDate
。您可以运行一些测试代码,比如选择日期(?),日期(?)并将其绑定到输入日期,来证明他们是如何被解读的?