MySQL - 别名数据库名称?

时间:2011-08-25 12:59:14

标签: mysql alias

我有一个系统性的问题,我没有时间或预算来修复,我希望有一个我可以部署的mysql hack,这将拯救我的小世界免于即将到来的厄运。

我现在管理的系统的创建者没有意识到数据库名称可能包含字母,数字和下划线以外的字符。因此,查询看起来像这样。

SELECT * FROM {$db}.settings

如果数据库名称包含非标准的内容...就像破折号一样。世界终结,所有疑问都破裂了。

db前缀是存在的,因为这个系统现在使用但不能运行多站点功能。

你会认为我可以用..来解决这个问题。

$db = "`{$db}`";

如果只是..你看到它结果是一堆javascript功能发送此数据库名称以跟踪要更新的站点。通过添加这些引号,您可以打破所有这些,而不是获取databasename,而是获得

`databasename`

所以......为什么我不把数据库名称设置为兼容的东西..这个系统发送到我无法控制数据库名称的外部服务器......

痛苦......

是否有办法在初步查询中对数据库名称进行别名,这将影响所有后续查询。基本上设定一个常数?

这样的东西将适用于所有后续查询。类似的东西:

set `$db` AS database

我可以将$ db变量设置为数据库,它应该运行..如果可能的话?

2 个答案:

答案 0 :(得分:0)

如果你总是在一个数据库上运行(连接到数据库后$ db没有改变),那么就在连接问题之后

USE `$db`;

并从所有查询中删除{$db}.前缀。 USE查询为当前连接中的将来查询设置活动(默认)数据库。

你没有说出你正在使用的编程语言,所以我将假设PHP。通常,您可以在建立连接时设置默认数据库(mysqli_connect(), $dbname parameter)。此外,您可以在连接后调用mysqli_select_db()之类的功能。

答案 1 :(得分:0)

我会使用以下内容修复查询:

sed -e "s/{\$db}/\`{\$db}\`/g" -i * */* */*/* */*/*/*

有一个很大的警告来测试这个,因为这可能会搞得很多。特别要检查sed的{​​{1}}选项是否需要后缀。