在做搜索的时候,遇到一个这样的问题,类似于这样的问题,如下图:
有这样一个表单,用户可选的填入”姓名”,”星座”,”爱好”表单,点击提交按钮,可以根据用户填入的值自动构造SQL语句,某项不填写,查询时会自动跳过该字段.
姓名 | 星座 | 爱好 | 提交 |
之前也遇到过类似的问题,但是处理的方法很麻烦,今天又遇到同样的问题,于是想了一个比较简便的方法,我封装了一个函数,给大家分享一下,这个函数可以根据传入的数据不同,自动的构造合适的SQL语句的where条件.
函数体:
/** * * @array array{字段=>值,字段=>值} * **/ function where($array) { $where=''; foreach($array as $field=>$value){ if($value != '' && $where == ''){ $where=' where '. '`' .$field. '`' .'=\''.$value.'\''; }elseif($value != ''){ $where .="and `{$field}` = '{$value}'"; } } return $where; }
调用实例1:
//所有字段均填写 $array=array( 'name'=>'李杨', 'sign'=>'巨蟹', 'like'=>'编程' ); $sql = 'select * from table'.where($array); echo $sql;
打印出的SQL语句为:select * from table where `name`=’李杨’ and `sign` = ‘巨蟹’ and `like` = ‘编程’
调用实例2:
//填写部分字段 $array=array( 'name'=>'李杨', 'sign'=>'', //该字段没有填写,接收的值为'' 'like'=>'编程' ); $sql = 'select * from table'.where($array); echo $sql;
打印出来的SQL语句为:select * from table where `name`=’李杨’ and `like` = ‘编程’
该函数只能处理判断条件为”=”的SQL,我也找找思路,后续完善一下,如果你有思路的话,欢迎留言.