Как определить имя базы данных с помощью MySQL PDO - PullRequest
1 голос
/ 02 апреля 2012

Я довольно новичок в библиотеке PDO, поэтому я прошу прощения за свою неопытность.Я пишу класс, который использует библиотеку 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, совершенно другие, и я не могу получить имя базы данных из текущего соединения.

Известно ли кому-либо тело функцию или метод для получения текущей подключенной базы данных соединения MySQLиспользуя библиотеку PDO в PHP?

Ответы [ 3 ]

2 голосов
/ 04 апреля 2012

Я заказываю подключение к 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 голос
/ 02 апреля 2012

Не вижу смысла искать открытое соединение и - особенно - проверять текущую базу данных.

Почему вы не можете просто открыть соединение, выбрать для него базу данных, а затем использовать это соединение все время в вашем классе - как и все?

0 голосов
/ 02 апреля 2012

См. Комментарии на странице справочника MySQL для ' USE database '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...