› 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 · Jan 13, 2021 · 3326 views
    This topic created in 2084 days ago, the information mentioned may be changed or developed.
    在看 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 replies  •  2021-01-13 15:56:43 +08:00
    eason1874
        1
    eason1874  
       Jan 13, 2021
    不是安全考虑,就是为了方便,没查询价值的,查询的时候会被优化掉。

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

    所有条件为真就整个前缀 where 1,后面追加直接 AND condition
    taogen
        2
    taogen  
       Jan 13, 2021 via Android
    可能是方便动态拼接 SQL
    msg7086
        3
    msg7086  
       Jan 13, 2021   ❤️ 2
    当年还没有各种 ORM,所以要复杂的检索查询就需要手拼查询字符串。
    就像上面说的,先放一个 "1",然后后面每次追加 "AND xxx LIKE xxx",比合并条件然后再去删掉一个 AND 方便。
    sodadev
        4
    sodadev  
       Jan 13, 2021 via Android
    主要是懒
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5032 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 01:32 · PVG 09:32 · LAX 18:32 · JFK 21:32
    ♥ Do have faith in what you're doing.