这是一个创建于 1192 天前的主题,其中的信息可能已经有所发展或是发生改变。
在看 discuz 时候,发现搜索帖子时候
1 个关键词
SELECT t.tid, t.closed, t.author, t.authorid FROM pre_forum_thread t WHERE t.fid IN ('2','36','37','4','39') AND t.displayorder>='0' AND (0 OR t.subject LIKE '%key%') ORDER BY tid DESC LIMIT 500
多个关键词:
SELECT t.tid, t.closed, t.author, t.authorid FROM pre_forum_thread t WHERE t.fid IN ('2','36','37','4','39') AND t.displayorder>='0' AND (1 AND t.subject LIKE '%key%' AND t.subject LIKE '%key1%') ORDER BY tid DESC LIMIT 500
就是 0 OR 与 1 AND 链接 like,这个有什么用处吗?
是防止 SQL 注入吗?
4 条回复 • 2021-01-13 15:56:43 +08:00
|
|
1
eason1874 2021-01-13 10:34:32 +08:00
不是安全考虑,就是为了方便,没查询价值的,查询的时候会被优化掉。
其中一个条件为真,那就整个前缀 where 0,后面所有追加直接 OR condition 就行了,不用判断是不是第一个,要不要写 OR
所有条件为真就整个前缀 where 1,后面追加直接 AND condition
|
|
|
2
taogen 2021-01-13 10:37:38 +08:00 via Android
可能是方便动态拼接 SQL
|
|
|
3
msg7086 2021-01-13 15:46:45 +08:00 2
当年还没有各种 ORM,所以要复杂的检索查询就需要手拼查询字符串。 就像上面说的,先放一个 "1",然后后面每次追加 "AND xxx LIKE xxx",比合并条件然后再去删掉一个 AND 方便。
|
|
|
4
sodadev 2021-01-13 15:56:43 +08:00 via Android
主要是懒
|