表前缀的做法很科学,当一个数据库中的存在多个项目时,而项目之间必定会存在相同命名的表,这时候给项目加上表前缀是很有必要的,所以我们应该习惯给项目里的表加表前缀。
通常我们设置表前缀是把表前缀做成一个配置。在程序中我们会把该表前缀加到sql语句的表名前。但是在程序中的具体操作有很多方式。
目前我看到了2种关于把表前缀加到sql语句中的做法:
1.dedecms
在写sql语句的时候不考虑表前缀的问题,在所有表的前面都加上同样的字符串(#@__),然后在sql语句执行前把sql用字符串匹配,将之前的字符串(#@__)替换成之前配置的表前缀。
2.ecshop
在公共函数库里面加一个函数,通过传入表名返回带有表前缀的表名,在sql语句中有表名的地方都调用该函数。
ecshop的做法很值得采取,而dedecms则不提倡使用,因为这种做法是有bug的。当sql语句中存在‘#@__’的地方都会被替换成表前缀,比喻我在dedecms系统中添加或者编辑我的这篇博客,那么发布之后你看到的内容就和我的原文就不一样的了(你能看出来哪里不一样吗?),还有在我们进行文章、产品搜索的时候,如果你输入的是‘#@__’的话,那么系统返回的搜索结果是搜索表前缀的结果。
时间: 2024-10-20 23:06:14