Ben Carey
Ben Carey

Reputation: 16968

How do I detect database name using MySQL PDO

I am rather new to the PDO library, so I apologize for my inexperience. I am writing a class that uses the PDO library to build and execute queries and return the results, no matter what they are.

Within the class, I detect whether there is an open connection to a database, and if it is the same as the one being configured, it uses this one instead. This is really easy to do using the MsSQL library as the PDO::getAttribute() function returns 'CurrentDatabase' and 'SQLServerName', so I can just apply a condition like so:

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;
    }
}

However, when it comes to MySQL, the data returned from PDO::getAttribute is completely different and I cannot seem to get the database name from the current connection.

Does any body know a function or method to get the currently connected database of a MySQL connection using the PDO library in PHP?

Upvotes: 1

Views: 5581

Answers (3)

Ben Carey
Ben Carey

Reputation: 16968

I order to connect to both MySQL and MsSQL, you must have 2 connections. However, changing the database on a live connection is very simple.

The following simply checks if a PDO instance already exists and whether or not it is using the required database. If so then it continues with this connection, if not it changes the database.

// 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; 
        }
    }
}

Upvotes: 2

Your Common Sense
Your Common Sense

Reputation: 158007

I see no point in looking for the opened connection and - especially - in checking for the current database.

Why can't you just open the connection, select the database for it and then use this connection all the time throughout your class - just like everyone does?

Upvotes: 1

symcbean
symcbean

Reputation: 48387

See comments on the MySQL manual page for 'USE database'

Upvotes: -1

Related Questions