代码之家  ›  专栏  ›  技术社区  ›  Paulo

RegEx在MySQL查询的每个表之前插入一个字符串

  •  0
  • Paulo  · 技术社区  · 17 年前

    理由和背景:

    SELECT * FROM users, teams WHERE users.team_id = teams.team_id ORDER BY users.last_name
    

    使用前缀“nx_”,它应该改为

    SELECT * FROM nx_users, nx_ teams WHERE nx_ users.team_id = nx_ teams.team_id ORDER BY nx_ users.last_name
    

    显然,它应该处理其他情况,如表别名、联接和其他常见的MySQL命令。

    3 回复  |  直到 17 年前
        1
  •  3
  •   Paolo Bergantino    17 年前

    我们在这里谈论的代码库有多大?像这样的东西的正则表达式是在认真地与灾难调情,我认为你最好找每一个 mysql_query

        2
  •  2
  •   DGM    17 年前

    使用正则表达式重写代码会有问题。

    $query = "SELECT foo from " . $table_prefix . "bar WHERE 1";
    

    如果你把它封装在一个类中,那就更好了。

        3
  •  0
  •   MarkusQ    17 年前

    select sender from email where subject like "from users group by email" 
    

    要真正做到这一点,你需要一些东西来解析SQL,生成一个可以修改的解析树,然后从修改后的解析树中发出修改后的SQL。有了这个,这是可行的,但不可取(出于保罗给出的原因)。

    一个更好的方法是在源代码中查找表名、用于发送SQL的函数、来自的单词或类似的东西,然后在脚本中将这些东西扔到编辑器中。