2016-10-21 19 views
2

私はperlで新しく、DBIを使用してデータベースに接続する必要があります。Perlデータベース接続

use LWP::Simple; 
use XML::Simple qw(:strict); 
use Data::Dumper; 
use DBI; 
use Getopt::Long; 
use IO::Uncompress::Gunzip qw(gunzip $GunzipError); 
use IO::File; 
use warnings; 

$dbh = DBI->connect("dbi:ODBC:DSN=$dbName;Server=$dbHost", 
        $dbUser, 
        $dbPassword); 


    if (!$dbh) { 
    &logMsg(0, "$DBI::errstr"); 
    die; 
    } else {&logMsg(0,"Connection to $dbName DB OK")} 

すでに$ dbName、$ dbHost、$ dbUserおよび$ dbPasswordの値を設定しています。そのような接続は失敗しましたが、何のエラーもありませんでした。私もログファイルをチェックし、何も表示されていません。エラーをチェックするために私は何ができますか?コメントと助けをありがとう。

+2

[トレース](https://metacpan.org/pod/DBI#TRACING)をオンにします。また、['RaiseError'](https://metacpan.org/pod/DBI#RaiseError)を有効にして、毎回の呼び出し後に手動でエラーをチェックする必要はありません。そして、常に '厳密に使う '! – ThisSuitIsBlackNot

+0

こんにちは@ThisSuitIsBlackいいえ、厳密にチェックしましたが、まだエラーは表示されていません。 – ccy

答えて

0

logMsgが機能しない限り、コードに問題はありませんが、DBIを使用するのは面倒な方法です。

DBIに何か問題がないかどうかを確認するのではなく、エラーをスローするようにDBIを設定する方がはるかに優れています。 RaiseErrorでこれを行うことができます。 DBIは、接続しようとするなどの障害が発生し、持っている場合

my $dbh = DBI->connect(
       "dbi:ODBC:DSN=$dbName;Server=$dbHost", 
       $dbUser, $dbPassword, 
       { RaiseError => 1 } 
     ); 

は今、それはエラーをスローし、プログラムを停止します。これにより、データベースを使用するたびにエラーをチェックする必要がなくなります(忘れることになります)。

+0

こんにちは、私はこれらのコードをLinuxで実行し、あなたのコードを試して、RaiseErrorを追加しました。変更と表示はありません。 – ccy

+0

@Kyan 'logMsg'が動作しない可能性がありますか?エラーを起こすために意図的に間違ったパスワードを試してください。また、あなたが思っているコードを実行していることを確認してください。 – Schwern

+0

私はlogMsgが動作していると思います。他の場所で使用しているため、エラーとメッセージが表示されます。 – ccy

0
DBI; 
$dbh = DBI->connect('Your_Database_Name', 'user_id','Password'); 
my $sth = $dbh->prepare ("select * from Table_name"); 
$sth->execute(); 
my @row_ary = $sth->hetshrow_array; 
foreach $item (@row_ary) 
{ 
print "$item\n"; 
} 
+2

ありがとうございます。この問題は既に解決されていますが、ありがとうございます。 – ccy