Wie verwende ich Leerzeichen in Parametern für DBI-connect?

8

Ich versuche, mit DBI und DBD::Pg eine Verbindung zu einem SSL-Clientschlüssel herzustellen.

%Vor%

Ich erhalte den folgenden Fehler:

%Vor%

Ich habe versucht, einzelne oder doppelte Anführungszeichen um die Werte herum zu verwenden, aber es gibt nichts in der Dokumentation.

Aktualisieren

Mit einfachen Anführungszeichen wie folgt:

%Vor%

Ich erhalte den folgenden Fehler:

%Vor%

Ich weiß, dass diese Konfiguration funktioniert, da sie in Python funktioniert.

Es stellt sich heraus, dass das funktioniert:

%Vor%

Warum brauche ich doppelte Backslashes?

    
RazerM 16.12.2015, 17:03
quelle

2 Antworten

3

Um ein Attribut mit Leerzeichen in Ihrem DSN einzuschließen, umgeben Sie den Wert mit einfachen Anführungszeichen:

%Vor%

Beachten Sie, dass das Semikolon, das zum Trennen der Verbindungsattribute verwendet wird, außerhalb der einfachen Anführungszeichen sein muss. Beachten Sie auch, dass umgekehrte Schrägstriche und einfache Anführungszeichen innerhalb von Attributen mit umgekehrten Schrägstrichen versehen werden müssen (Sie müssen oben drei umgekehrte Schrägstriche verwenden, da Perl \ in einfach zitierte Strings in \ konvertiert).

Wenn Ihr DSN in doppelte Anführungszeichen eingeschlossen ist, müssen Sie vier umgekehrte Schrägstriche verwenden, da Perl Escape-Sequenzen wie \n in doppelt zitierten Strings interpoliert:

%Vor%

Wie für die Dokumentation, sehe ich das nicht in DBD :: Pg erwähnt, aber Sie können sehen, dass es durch das Betrachten der Quelle unterstützt wird. Der Code, der den DSN behandelt, befindet sich in dbdimp.c im DBD :: Pg Verteilung:

%Vor%

Dies konvertiert eine DBI-artige Verbindungszeichenfolge in eine libpq-artige Verbindungszeichenfolge (libpq ist die Postgres C API, die DBD :: Pg im Hintergrund verwendet). Da der generierte DSN direkt an libpq übergeben wird, muss er den in libpq Dokumentation .

Ein Dokumentationspatch für DBD :: Pg wäre sicherlich in Ordnung.

    
ThisSuitIsBlackNot 17.12.2015, 16:35
quelle
1

Das Problem ist der Raum. Es ist nicht klar, ob es möglich ist, einen Pfad mit einem Leerzeichen zu versehen. Wenn dies der Fall ist, handelt es sich wahrscheinlich um eine treiberspezifische Syntax. Sie müssen möglicherweise in DBI und / oder DBD :: Pg suchen, um die Syntax zu bestimmen, wenn sie unterstützt wird. Einige haben dies getan und in den Kommentaren erwähnt, dass Sie möglicherweise Folgendes verwenden können:

%Vor%

Oder Sie könnten das Problem aus einem anderen Blickwinkel betrachten. Windows verfügt über ein Abwärtskompatibilitätssystem, um Anwendungen zu ermöglichen, die nur Pfade im DOS-Stil unterstützen. Beachten Sie, dass DOS keine Leerzeichen in Pfaden erlaubt. Mit DOS-Pfaden können Sie das Problem vermeiden.

%Vor%

Eine andere Lösung besteht darin, eine Konfigurationsdatei zu verwenden, wie in der Dokumentation von DBD :: Pg beschrieben.

>     
ikegami 16.12.2015 21:53
quelle

Tags und Links