$query="select * from ent_data WHERE company LIKE '%$q%' AND state LIKE '%$state%' AND class LIKE '%$class%' and fid='$fid'";
前面用模糊查询都可以为空,但 fid 这里又必须要求准确。但这样查询条件就不能留空,怎么破?
1
macwhirr 2017-08-16 14:44:20 +08:00
前边加个判断
|
3
silencefent 2017-08-16 14:49:26 +08:00
用三目运算符判断也不费多少事
|
4
shaweren OP @silencefent
$query. = isset($fid) ? 'and fid='$fid'' : ''; 我是这么写的,但是好像不行,不知道是哪里的问题。 |
5
annielong 2017-08-16 15:04:36 +08:00
加判断后,如果不为空,就$query=$query+“ and fid='$fid' ”,目前都是这样处理的
|
6
rocksolid 2017-08-16 15:07:41 +08:00
难道不是 where 1=1 加上后面么
|
7
AnonymousAccout 2017-08-16 15:11:08 +08:00 via iPhone
ls 加一,java 党表示用原生 jdbc 手写 sql 练就了一身各种姿势拼接 sql 语句的本领
|
8
shaweren OP if($fid>0){
$query=$query."and fid='$fid'"; }else{ }; 用这种方式解决的.. |
9
ZhLTE 2017-08-16 16:00:08 +08:00
where 1=1
|
10
noNOno 2017-08-16 16:14:01 +08:00
select * from ent_data WHERE
case when company LIKE '%$q%' AND state LIKE '%$state%' AND class LIKE '%$class%' and fid='$fid' then 1 when fid is null then 1 else 0 end =1 |
11
silencefent 2017-08-16 16:24:33 +08:00
|
12
reus 2017-08-16 16:29:28 +08:00 1
还拼接 SQL ?都什么时代了
CASE WHEN $fid <> '' THEN fid = $fid ELSE true END |
13
cxbig 2017-08-16 20:21:54 +08:00 via iPad
用 ORM 组件,有值的条件才放 where 里。
|
14
jatesun 2017-08-17 11:59:11 +08:00
提前校验过滤空值
|
15
WheatField 2017-09-06 21:53:16 +08:00
@cxbig 我也觉得如此
|