我有两个共享用户凭据的数据库。 我正在使用PDO。这是否意味着我必须创建两个PDO连接,每个数据库一个?我检查了文档,dsn只代表一个dbname。
答案 0 :(得分:3)
不,如果您访问的数据库位于物理上不同的数据库实例(不同的服务器计算机或不同的数据库副本),或者正在为这两个数据库使用不同的凭据,那么您只需要两个连接。 / p>
您在DSN中指定的数据库名称仅仅是默认数据库,但您可以轻松地执行
SELECT fieldname FROM schema.table ...
覆盖该默认值。 e.g。
SELECT fieldname FROM table
相当于
SELECT fieldname FROM default_specified_in_connection_string.table
答案 1 :(得分:2)
是的,这不是PDO特有的。每个MySQL客户端连接,无论使用何种语言,都可以在(最多)一个数据库上运行。如果要更改数据库,则必须使用USE newDatabaseName
。但这当然对PDO毫无意义,所以只需创建两个连接即可。
编辑:
但是,正如 Marc B 指出的那样,您可以使用前缀来引用同一MySQL服务器上的不同数据库。但这并不是很方便,我认为当你有特定于连接的设置时它会导致问题(例如,某个字符集与其他数据库不兼容)。
答案 2 :(得分:1)
是的,您必须设置与每个数据库的连接。
答案 3 :(得分:1)
取决于你的意思"数据库"。有些人使用该术语来指代MySQL实例。每个PDO连接只能引用一个MySQL实例。
但有些人使用术语数据库作为" schema"的同义词。单个MySQL实例上可以有许多模式,您可以使用单个PDO连接来访问任何模式。使用以下解决方案之一:
USE schema_name
以更改默认架构(请参阅我对How do I select a MySQL database to use with PDO in PHP?的回答)另一个例外是,您用于连接MySQL实例的用户/密码是否仅被授予您要使用的其中一个模式的权限。然后,您需要使用其他用户/密码重新连接以访问其他模式。