5

Perl DBI を使用して MySQL データベースに接続しました。どのデータベースに接続しているかを知りたいです。

私は使用できないと思います:

$dbh->{Name}

最初に接続したデータベースを呼び出しUSE new_database$dbh->{Name}報告するだけだからです。

何かトリックはありますか、それともデータベース名を追跡する必要がありますか?

4

5 に答える 5

13

クエリを実行してみてください

select DATABASE();

私が見つけたところによると、DBH は最初に接続した DSN にアクセスできますが、変更を行った後はアクセスできません。(おそらく、データベースを切り替えるより良い方法があります。)

于 2008-11-21T05:37:41.493 に答える
3

$dbh->{Name}db ハンドルから db 名を返します。

dbh に接続した後で、mysql クエリ "USE db_name" を使用して別のデータベースに接続し、新しい perl DBI db ハンドルを設定していない場合、もちろん、$dbh->{Name} は以前に接続した最初のものを返します。 ……自然発生じゃない。

したがって、db ハンドルが設定されたら、接続された db 名を取得するには - DBI mysql の場合:

sub get_dbname {  
    my ($dbh) = @_;  
    my $connected_db = $dbh->{name};  
    $connected_db =~ s/^dbname=([^;].*);host.*$/$1/;  
    return $connected_db;  
}  
于 2011-01-08T14:10:54.957 に答える
1

あなたはmysqlに尋ねることができます:

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

更新:明らかに select DATABASE() はそれを行うためのより良い方法です:)

于 2008-11-21T05:35:21.890 に答える
0

FWIW - おそらくそれほど多くはありません - DBD::Informix は現在のデータベースを追跡します。これは、CREATE DATABASE などの操作を行うと変更される可能性があります。属性は、$dbh->{Name}ハンドルが確立されるときに使用される名前として DBI 仕様によって指定されます。$dbh->{ix_DatabaseName}したがって、実際の現在のデータベース名を提供する Informix 固有の属性があります。参照: perldoc DBD::Informix

DBD::MySQL のメンテナーに同様の属性を追加するよう依頼することを検討できます。

于 2008-11-21T07:25:04.413 に答える
0

接続オブジェクトを作成すると、それは特定のデータベース用になります。とにかくDBIの場合。私は、SQLUSE database_nameを実行しても接続インスタンスにまったく影響を与えないと思います。接続オブジェクト用の select_db (My DBI is ruby​​) 関数があるか、接続インスタンスが適切に報告するために新しいデータベースへの新しい接続を作成する必要があります。

于 2008-11-21T05:40:08.090 に答える