Как я могу получить имя базы данных из дескриптора Perl MySQL DBI? - PullRequest
5 голосов
/ 21 ноября 2008

Я подключился к базе данных MySQL, используя Perl DBI. Я хотел бы узнать, к какой базе данных я подключен.

Не думаю, что смогу использовать:

$dbh->{Name}

потому что я звоню USE new_database, а $dbh->{Name} сообщает только о той базе данных, к которой я изначально подключился.

Есть ли хитрость или мне нужно отслеживать имя базы данных?

Ответы [ 5 ]

13 голосов
/ 21 ноября 2008

Попробуйте просто выполнить запрос

select DATABASE();

Из того, что я мог найти, у DBH есть доступ к DSN, с которым вы первоначально подключились, но не после того, как вы внесли изменение. (Возможно, есть лучший способ переключения баз данных.)

2 голосов
/ 08 января 2011

$dbh->{Name} возвращает имя БД из вашего дескриптора БД.

Если вы подключились к другой базе данных после подключения к вашей базе данных, используя mysql-запрос «USE db_name», и вы не настроили новый дескриптор базы данных perl DBI, конечно, $ dbh -> {Name} вернет вам первую ранее связано с ... Это не спонтанное поколение.

Таким образом, чтобы получить имя подключенной БД после настройки дескриптора БД - для DBI mysql:

sub get_dbname {  
    my ($dbh) = @_;  
    my $connected_db = $dbh->{name};  
    $connected_db =~ s/^dbname=([^;].*);host.*$/$1/;  
    return $connected_db;  
}  
1 голос
/ 21 ноября 2008

Вы можете спросить MySQL:

($dbname) = (each %{$dbh->selectrow_hashref("show tables")}) =~ /^Tables_in_(.*)/;

Обновление: очевидно, что лучше выбрать DATABASE ():)

0 голосов
/ 21 ноября 2008

FWIW - вероятно, не очень - DBD :: Informix отслеживает текущую базу данных, которая может измениться, если вы выполните такие операции, как CREATE DATABASE. Атрибут $dbh->{Name} указывается в спецификации DBI как имя, используемое при установке дескриптора. Следовательно, есть специфичный для Informix атрибут $dbh->{ix_DatabaseName}, который предоставляет фактическое имя текущей базы данных. Смотри: perldoc DBD::Informix.

Вы можете запросить у сопровождающего (-ых) DBD :: MySQL добавить похожий атрибут.

0 голосов
/ 21 ноября 2008

Когда вы создаете объект соединения для определенной базы данных. В любом случае, в случае с DBI. Я не верю, что выполнение SQL USE database_name вообще повлияет на ваш экземпляр соединения. Возможно, есть функция select_db (мой DBI ржавый) для объекта соединения, или вам нужно будет создать новое соединение с новой базой данных для экземпляра соединения, чтобы правильно сообщить об этом.

...