常量和MySQL,最佳实践

5

我目前有一组定义好的常量和一个函数,该函数会对每个从MySQL数据库中拉取的字符串进行正则匹配,并寻找 CLIENT_NAME、LOCAL_API_ADDRESS 等内容并自动更改。

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

问题是,随着我的应用程序变得越来越大,我觉得这种方法非常低效并且容易遗漏字符串(忘记在某个地方使用正则表达式)。

你们怎么处理这个问题?

3个回答

5
MySQL从v3.23.6开始就拥有用户定义变量,但它们是与连接相关的。也就是说,一个客户端定义的用户变量不能被其他客户端看到或使用。当客户端退出时,给定客户端连接的所有变量都会自动释放。实际上,MySQL没有存储常量的约定。您可以将值存储在表中,但像MySQL的REGEXP这样的东西可能需要使用MySQL的Prepared Statements进行动态SQL以利用设置。

实际上,我采用了Aaron的方式(我的方式),并将继续使用正则表达式来处理事情。只是以一种更受控制的方式,并保持一个站点范围的类来处理它(以最小化松散的末尾)。但你的回应更加切中要害。 - Frankie

4
说实话,除非你做这个的次数异常多,否则这并不太难。许多模板引擎使用正则表达式进行搜索和替换。大部分开销都在第一次加载正则表达式引擎时发生。多次查询并不那么昂贵。
最好确保您的正则表达式已经优化。

2

处理这样的数据时要小心。如果您从数据库提取数据来覆盖某些常量,可能会导致安全问题!


感谢您的输入。实际上,数据库中存储的所有常量都是由网站管理员(即我)添加的。因此,这并不是一个安全问题。它们被设计成这样,以便我可以与多个不同的网站共享代码库。尽管如此,指出漏洞总是好的。 - Frankie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接