V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
lixuda
V2EX  ›  MySQL

mysql like 问题求教

  •  
  •   lixuda · 6 天前 · 736 次点击
    在看 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
    eason1874
        1
    eason1874   6 天前
    不是安全考虑,就是为了方便,没查询价值的,查询的时候会被优化掉。

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

    所有条件为真就整个前缀 where 1,后面追加直接 AND condition
    taogen
        2
    taogen   6 天前 via Android
    可能是方便动态拼接 SQL
    msg7086
        3
    msg7086   6 天前   ❤️ 1
    当年还没有各种 ORM,所以要复杂的检索查询就需要手拼查询字符串。
    就像上面说的,先放一个 "1",然后后面每次追加 "AND xxx LIKE xxx",比合并条件然后再去删掉一个 AND 方便。
    sodadev
        4
    sodadev   6 天前 via Android
    主要是懒
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3323 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 12:50 · PVG 20:50 · LAX 04:50 · JFK 07:50
    ♥ Do have faith in what you're doing.