2014-09-18 47 views
0

我有一个共享的用户凭据两个数据库。 我正在使用PDO。这是否意味着我必须创建两个PDO连接,每个数据库一个?我查看了文档,dsn仅代表一个dbname。PDO和多模式

+0

您是否希望一次只有一个数据库连接处于活动状态,或者两个连接都可以同时处于活动状态? – Mubo 2014-09-18 21:55:09

回答

1

是的,你必须设置每个数据库的连接。

2

是的,这是不是PDO特定的。无论使用哪种语言,每个MySQL客户端连接(最多)都可以在一个数据库上运行。如果您想更改数据库,则必须使用USE newDatabaseName。但是这对PDO来说当然没有意义,所以只需创建两个连接即可。

编辑:

然而,随着马克乙指出的那样,你可以使用前缀相同的MySQL服务器上引用不同的数据库。但是,这是不是真的好用,我会想,这可能会导致问题,当你有连接特定的设置(例如,某个字符集,是不是与其他数据库兼容)。

3

没有,你只需要两个连接,如果您所访问的数据块在物理上完全不同的数据库实例(不同的服务器机器或不同的数据库副本),或正在使用的两个数据库不同的凭据。

您在DSN指定的数据库名称仅仅是默认数据库,但是你可以做平凡

SELECT fieldname FROM schema.table ... 

覆盖该默认值。例如

SELECT fieldname FROM table 

SELECT fieldname FROM default_specified_in_connection_string.table 
+0

当然!我没有想到明确引用数据库。好点子。 – lxg 2014-09-18 21:52:05

1

相当于取决于你所说的 “数据库” 的意思。有些人使用这个术语来指代一个MySQL实例。每个PDO连接只能引用一个MySQL实例。

但有些人使用术语数据库作为“模式”的代名词。在单个MySQL实例上可以有很多模式,并且您可以使用单个PDO连接来访问任何模式。使用以下解决方案之一:

另一个例外是,如果您用于连接到MySQL实例的用户/密码仅被授予了您要使用的模式之一的权限。然后,您需要重新连接不同的用户/密码才能访问其他模式。