2012-04-02 45 views
0

我對PDO庫頗爲陌生,因此對於缺乏經驗而表示歉意。我正在編寫一個使用PDO庫的類來構建和執行查詢並返回結果,無論它們是什麼。如何使用MySQL PDO檢測數據庫名稱

在該類中,我檢測是否存在與數據庫的打開連接,如果它與正在配置的連接相同,則使用此連接。這是很容易使用MSSQL庫作爲PDO::getAttribute()函數返回「CurrentDatabase」和「SQLSERVERNAME」這樣做,這樣我就可以申請的條件,像這樣:

if(!empty($this->PDO)){ 
    // Get the current connection information 
    $current_connection = $this->PDO->getAttribute(PDO::ATTR_SERVER_INFO); 
    // Return if the connection is the same 
    if($this->connection_parameters['hostname']==$current_connection['SQLServerName']&&$this->connection_parameters['database']==$current_connection['CurrentDatabase']){ 
     return; 
    } 
} 

然而,當涉及到MySQL的數據從PDO::getAttribute返回是完全不同的,我似乎無法從當前連接獲取數據庫名稱。

是否有任何機構知道使用PHP中的PDO庫來獲取當前連接的MySQL連接數據庫的函數或方法?

回答

1

我爲了連接到MySQL和MsSQL,你必須有2個連接。但是,在活動連接上更改數據庫非常簡單。

下面只是簡單地檢查一個PDO實例是否已經存在,以及它是否正在使用所需的數據庫。如果是這樣,那麼它繼續這個連接,如果沒有,它會改變數據庫。

// Test if the PDO object already exists 
if(!empty($this->PDO)){ 

    // If connection is the same then select the database 
    if($this->connection_engine==$this->PDO->getAttribute(PDO::ATTR_DRIVER_NAME)){ 

     // Get the current database in use 
     $database = $this->PDO->query("SELECT {$this->select_db_function}"); 
     $database = $database->fetchAll(PDO::FETCH_NUM); 
     $database = $database[0][0]; 

     // If the current database matches the new database then return 
     if($database==$this->connection_parameters['database']){ 
      return; 
     } 
    } 
} 
-1

見MySQL手冊頁面上評論爲「USE database

+0

謝謝你的回答,但我寧願不使用查詢。我將使用此方法作爲最後的手段 – 2012-04-02 15:58:05

1

我看不出點尋找打開的連接和 - 尤其是 - 在檢查當前數據庫。

爲什麼你不能只打開連接,爲它選擇數據庫,然後在整個班級中一直使用這個連接 - 就像每個人一樣?

+1

如果在一個使用兩個不同服務器的腳本中執行兩個查詢,則必須有兩個連接! – 2012-04-02 16:10:41

+0

好的,有兩個班的實例,有什麼問題?每次你需要另一臺服務器時,你不打算重新連接,是嗎? – 2012-04-02 16:12:54

+0

我將有兩個課程的實例,當然兩個單獨的連接!但是,當您啓動該類的實例時,它與PDO稍有混淆,必須輸入數據庫參數。因此,我認爲你無法在不創建新實例的情況下更改數據庫!謝謝你指出,這顯然是解決方案。 – 2012-04-02 16:19:42