2012-04-02 3 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 полностью отличается, и я не могу получить имя базы данных из текущего соединения.

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

ответ

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

Спасибо за ваш ответ, но я бы предпочел сделать это, не используя запрос. Я буду использовать этот метод как последнее средство –

1

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

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

+1

Если вы выполняете два запроса в одном скрипте, который использует два разных сервера, у вас должно быть два подключения! –

+0

Хорошо, у вас 2 экземпляра класса, в чем проблема? Разве вы не собираетесь повторно подключаться каждый раз, когда вам нужен другой сервер, не так ли? –

+0

У меня будет два экземпляра класса для двух отдельных подключений, конечно! Тем не менее, это немного запутывает PDO, поскольку, когда вы запускаете экземпляр класса, вы должны ввести параметр базы данных. Поэтому я думал, что вы не смогли изменить базу данных, не создавая новый экземпляр! Спасибо, что указали, что это, очевидно, решение тогда. –

Смежные вопросы