在做搜索的时候,遇到一个这样的问题,类似于这样的问题,如下图:
有这样一个表单,用户可选的填入”姓名”,”星座”,”爱好”表单,点击提交按钮,可以根据用户填入的值自动构造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,我也找找思路,后续完善一下,如果你有思路的话,欢迎留言.