如何最好地修改带有表前缀的 sql 查询

Posted

技术标签:

【中文标题】如何最好地修改带有表前缀的 sql 查询【英文标题】:How best to modify sql queries with table prefix 【发布时间】:2012-06-26 18:28:23 【问题描述】:

我正在创建一个具有安装程序的新 CMS。

我允许表名以自定义字符串为前缀。

修改带有前缀表名的sql的推荐方法是什么?

我是否必须将 DB_PREFIX 添加到每个查询中,或者以后有什么方法可以通过修改 sql 在我的数据库类中完成?

谢谢

【问题讨论】:

【参考方案1】:

一种技术是使用用大括号括起来的表编写所有 SQL 查询,并使用将这些大括号替换为所需数据库前缀的函数。

不要编写标准的 SQL 查询,而是将表名包含在例如花括号如:

//SQL query in your code
$query=prefixQuery("SELECT name FROM customers WHERE id=$id");

并定义简单的函数,用前缀替换左边的 ,并删除右边的 :

define(DB_PREFIX,'myprefix_');

function prefixQuery($query)

   return str_replace('','',str_replace('',DB_PREFIX,$query));

【讨论】:

【参考方案2】:

您可以为每个查询添加前缀,是的。

您还可以像这样使用函数 str_replace 解析每个查询:

str_replace('mytable', 'prefix_mytable', $Query);

我会选择 1 号选项,减少负载。

提示:如果您创建一个新的 CMS,请提供一个 DB 类并自动添加前缀。

【讨论】:

这是个好主意,但表名可能未知。我想我可以: 1. 从数据库中获取表列表 2. 从名称中删除前缀 3. 将不带前缀的表名存储在 $from 数组中 4. 将带前缀的表名存储在 $to 中数组 5. 用 sql 上的 from 和 to 数组做一个 str 替换 你认为这是最好的方法吗? 是的,你知道表名。当您运行查询时,假设 SELECT * FROM supertable,您知道表名是 supertable。所以你只需要SELECT * FROM '.str_replace('supertable', 'prefix_supertable', $Table).' WHERE 1 这与 DB_PREFIX 基本相同。 table_name 虽然...我尝试了上面写的内容,但它破坏了在列名中使用表名中使用的相同字符串的地方。

以上是关于如何最好地修改带有表前缀的 sql 查询的主要内容,如果未能解决你的问题,请参考以下文章

如何在带有 £ 符号的数字列上为 SQL 查询添加前缀 [重复]

sql promapt怎么不加表前缀

我应该如何最好地从 VB.net 查询我的数据集?

带有未声明前缀的 SQL Server Xml 查询

如何运行多个 SQL 查询?

sqlserver中如何批量修改一个表的数据