代码之家  ›  专栏  ›  技术社区  ›  Matthew Dresser

有在多个文件中查找SQL语句并列出任何引用的表和存储过程的实用工具吗

  •  1
  • Matthew Dresser  · 技术社区  · 15 年前

    我现在看到的是一个糟糕的旧版ColdFusion应用程序,它只使用很少的存储过程和大量讨厌的内联SQL语句(它的数据库也同样糟糕)。

    是否有人知道任何可用于搜索应用程序文件的应用程序,选择任何SQL语句并列出引用的表/存储过程?

    3 回复  |  直到 15 年前
        1
  •  2
  •   kevink    15 年前

    如上所述,我会尝试一个grep与一个regex寻找

    "<cfquery*" "</cfquery>" and "<cfstoredproc*" "</cfstoredproc>"
    

    此外,如果您的测试具有良好的代码覆盖率,甚至只是觉得应用程序在生产中得到了充分的应用,您可以尝试在管理数据源中打开“日志数据库调用”,甚至在JDBC驱动程序级别上,只需监视性能,以确保它不会以不可接受的方式降低站点速度。

        2
  •  3
  •   genericHCU    15 年前

    Dreamweaver将允许您搜索整个站点的代码。如果站点设置正确,包括rds密码并提供数据源,它可以告诉您很多信息。我只设置了一次,所以我记不清它给了你什么信息,我想可能只是数据库结构。应用程序窗口>数据库。即使没有正确设置,只要搜索“cfquery”就可以快速找到所有查询。

    您还可以使用cfdirectory/cffile编写一个cf脚本来循环.cfm文件并解析cfquery和/cfquery标记之间的所有内容。

    cfbuilder可能有一些这样的特性,但我还不熟悉它。

    编辑 我听说cfbuilder本机无法找到所有没有cfqueryparam的cfquery,但可以使用cfb扩展cfb。我想你可以为CFB找到/写些东西来帮助你解决你的问题。

    另一个编辑

    我知道它并没有索引查询的内容,但是您也可以使用regex来使用编辑器进行搜索。寻找 <cfquery.+(select|insert|update|delete) 选中regex框将找到不使用cfstoredproc的查询(如果有匹配大小写选项,请确保取消选中)。我知道Dreamweaver和Eclipse都可以搜索regex。

    高温高压

        3
  •  1
  •   nont    15 年前

    简言之:不,您必须进行大量复杂的解析,以确保获得所有SQL。而且,因为您可以从许多字符串中组合SQL,所以您几乎总是会错过其中的一部分。

    最好的方法是使用不区分大小写的grep来“select insert update delete”,然后手动拉出表名。

    根据代码的结构,您可以通过重新退出SQL FROM子句来获取表名。但这并非万无一失。很多人使用字符串连接来构建SQL语句。这是不好的,因为它可以引入SQL注入攻击,而且还使这个特定的问题更加困难。