2010-12-16 9 views
3

Apache::DBIで接続の検証を無効にする際に問題があります。 perldocから
Apache :: DBIでpingを無効にするにはどうしたらいいですか?

はApache :: DBI-> setPingTimeOut($のDATA_SOURCE、 $タイムアウト)

これは、接続を検証するために、pingを 方法の使用を設定します。 タイムアウトを0に設定すると、 は、 のpingメソッド(デフォルト)を使用してデータベース接続を検証します。 タイムアウト<を0に設定すると、データベースハンドルの 検証が無効になります。

connect()と同じ$ data_sourceでsetPingTimeOutを呼び出してみましたが、機能しませんでした。誰もがpingを無効にすることができましたか?明確にするために

+0

$ data_sourceを投稿できますか? –

+0

@martin:私はこのdsn: 'DBI:mysql:database = dbname; host = localhost'を使って接続します。私は$ timeout = -1でこれを試しましたが、役に立たなかった。私は 'dbi:mysql:dbname'を – planetp

+1

というコードで試してみましたが、regexp /dbi:\w+:.*/と一致するdsnだけがpingタイムアウトを正常に登録するようです。あなたの2番目のdsnは妥当と思われます。 setPingTimeOut関数には、「指定された属性設定なしでDSNを使用する」というコメントに注意してください。 –

答えて

4

codeがあります

# use a DSN without attribute settings specified within ! 
sub setPingTimeOut { 
    my $class  = shift; 
    my $data_source = shift; 
    my $timeout  = shift; 

    # sanity check 
    if ($data_source =~ /dbi:\w+:.*/ and $timeout =~ /\-*\d+/) { 
     $PingTimeOut{$data_source} = $timeout; 
    } 
} 

は '健全性チェック' を注意してください。したがって、大文字の「DBI:」を持つデータソース名のpingタイムアウトは暗黙のうちに無視されます。

関連する問題