2011-08-25 88 views
1

我有一个系统性的问题,我没有时间或预算来修复,我希望有一个可以部署的mysql hack,这可以帮助我的小世界免于即将到来的厄运。MySQL - 别名数据库名称?

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

SELECT * FROM {$db}.settings 

如果数据库名称包含非标准的东西...像一个破折号。世界即将结束,所有查询都会中断。

数据库前缀在那里,因为这个系统使用但并不现在运行多站点功能。

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

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

如果只..你看到它原来的JavaScript功能解决此数据库名称发送负荷跟踪更新的站点。通过添加这些报价,你打破了这一切的不是得到databasename的,是越来越

`databasename` 

所以......为什么不让我刚才设置的数据库名称的东西,是兼容的。这个系统的船舶到外部服务器在那里我有过的数据库名称无法控制......

疼痛...

有没有办法在初步查询,则这将影响所有后续查询别名数据库名称。基本上设置一个常量?

类似的东西,然后将在所有后续查询工作。就像:

set `$db` AS database 

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

回答

0

我会使用类似的修复查询:

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

一个大警告对此进行测试,因为这可能会搞乱了很多。特别检查您的sed-i选项是否需要后缀。

0

如果你在一个数据库(您连接到数据库后,$ DB不改变)总是在工作,那么就连接问题

USE `$db`; 

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

你没有告诉你使用什么编程语言,所以我会假设PHP。通常您可以在建立连接时设置默认数据库(mysqli_connect(), $dbname parameter)。此外,您可能会在连接后调用mysqli_select_db()等功能。