$query="select * from ent_data WHERE company LIKE '%$q%' AND state LIKE '%$state%' AND class LIKE '%$class%' and fid='$fid'";
前面用模糊查询都可以为空,但 fid 这里又必须要求准确。但这样查询条件就不能留空,怎么破?
1 toomwan 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 ![]() 还拼接 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 提前校验过滤空值 |
![]() |