2010-12-16 13 views
3

Ich habe ein Problem beim Deaktivieren der Validierung der Verbindung in Apache::DBI.
Vom perldoc:Wie kann ich Pings in Apache :: DBI deaktivieren?

Apache :: DBI> setPingTimeOut ($ data_source, $ timeout)

Dadurch wird die Nutzung des Verfahrens ping konfiguriert, um eine Verbindung zu validieren. Wenn Sie das Zeitlimit auf 0 setzen, wird immer die Datenbankverbindung validieren, indem Sie die Ping-Methode (Standard) verwenden. Das Setzen des Timeouts < 0 deaktiviert die Validierung des Datenbankhandles.

versuchte ich setPingTimeOut mit dem gleichen $ data_source wie in connect() aufrufen, aber es hat nicht funktioniert. Hat es jemand geschafft, die Pings zu deaktivieren?

+0

können Sie Ihre $ data_source posten? (Mit allem Geheimnis geeignet verschleiert.) –

+0

@martin: Ich verbinde mit dieser dsn: 'DBI: mysql: Datenbank = Datenbankname; Host = localhost'. Ich versuchte dieses mit $ timeout = -1, aber ohne Erfolg. Ich versuchte auch 'dbi: mysql: dbname' – planetp

+1

in dem Code sieht es aus nur dsn passender regexp /dbi:\w+:.*/ wird ping timeouts erfolgreich registrieren. Deine zweite DSN sieht plausibel aus. Beachten Sie den Kommentar "Verwenden Sie einen DSN ohne Attributeinstellungen in angegeben" für die SetPingTimeOut -Funktion. –

Antwort

4

Um zu klären, die code hat:

# 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; 
    } 
} 

Beachten Sie die 'Plausibilitätsprüfung'. Daher wird das Ping-Timeout für einen Datenquellennamen mit dem Großbuchstaben 'DBI:' stillschweigend ignoriert.