2014-09-18 48 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實例的用戶/密碼僅被授予了您要使用的模式之一的權限。然後,您需要重新連接不同的用戶/密碼才能訪問其他模式。