mysql like 问题求教

2021-01-13 10:24:33 +08:00
 lixuda
在看 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 注入吗?
2163 次点击
所在节点    MySQL
4 条回复
eason1874
2021-01-13 10:34:32 +08:00
不是安全考虑,就是为了方便,没查询价值的,查询的时候会被优化掉。

其中一个条件为真,那就整个前缀 where 0,后面所有追加直接 OR condition 就行了,不用判断是不是第一个,要不要写 OR

所有条件为真就整个前缀 where 1,后面追加直接 AND condition
taogen
2021-01-13 10:37:38 +08:00
可能是方便动态拼接 SQL
msg7086
2021-01-13 15:46:45 +08:00
当年还没有各种 ORM,所以要复杂的检索查询就需要手拼查询字符串。
就像上面说的,先放一个 "1",然后后面每次追加 "AND xxx LIKE xxx",比合并条件然后再去删掉一个 AND 方便。
sodadev
2021-01-13 15:56:43 +08:00
主要是懒

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/744440

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX