【问题标题】:constants and mysql, best practices常量和mysql,最佳实践
【发布时间】:2011-03-06 02:16:23
【问题描述】:

我目前有一个已定义常量的列表和一个函数,该函数对每个拉取的 MySQL 字符串进行正则表达式,并查找诸如 CLIENT_NAME、LOCAL_API_ADDRESS 之类的内容并自动更改它。

// several fields
define ('CLIENT_NAME', '...');
define ('LOCAL_API_ADDRESS', '...');
...

问题是,随着我的应用程序变得越来越大,我觉得这非常低效并且必然会出现松散的字符串(忘记在这里或那里进行正则表达式)。

你们是怎么解决这个问题的?

【问题讨论】:

    标签: php mysql regex constants


    【解决方案1】:

    MySQL 有 User-defined variables since v3.23.6,但他们...

    ...是特定于连接的。也就是说,一个客户端定义的用户变量不能被其他客户端看到或使用。给定客户端连接的所有变量都会在该客户端退出时自动释放

    实际上,MySQL 中没有存储常量的约定。

    您可以将值存储在表中,但 MySQL 的 REGEXP 之类的东西可能需要动态 SQL(使用 MySQL 的 Prepared Statements)才能利用设置。

    【讨论】:

    • 实际上我是按照 Aaron 的方式(我的方式)去的,并且会继续 REGEX'ing 的东西。只是以一种更可控的方式并为它保留一个站点范围的类(以尽量减少松散的结果)。但你的反应更符合目标。
    【解决方案2】:

    老实说,除非您执行此操作的次数异常多,否则执行此操作并没有那么糟糕。许多模板引擎使用正则表达式搜索和替换。大部分开销是第一次加载正则表达式引擎。多个查询并没有那么昂贵。

    您最好确保优化您的正则表达式。

    【讨论】:

      【解决方案3】:

      小心处理这样的数据。如果您从数据库中提取覆盖某些常量的数据,您最终可能会遇到安全问题!

      【讨论】:

      • 感谢您的意见。实际上存储在数据库中的所有常量只能由站点的管理员(我)到达那里。所以它真的不是一个安全问题。他们是这样做的,所以我可以与几个不同的站点共享一个代码库。尽管如此,指出松散的结局总是好的。
      猜你喜欢
      • 2017-11-30
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 2012-03-27
      • 2013-08-03
      • 1970-01-01
      • 2013-06-07
      相关资源
      最近更新 更多