2011-01-06 7 views
1

Dies ist das grundlegendste libpq-Beispiel, an das ich denken könnte, um mein Problem zu veranschaulichen. Das Ziel besteht darin, nur die gesperrte Zeichenfolge auszudrucken.PQescapeLiteral nicht definiert?

#include <iostream> 
#include <libpq-fe.h> 
#include <string.h> 

using namespace std; 

int main(){ 
    PGconn *db; 
    char connstring[] = "dbname=TheInternet"; 
    db = PQconnectdb(connstring); 
    char url[] = "http://www.goo'gle.com/"; 
    cout<<PQescapeLiteral(db, (const char *)url, (size_t) strlen(url))<<"\n"; 
} 

Wenn ich kompilieren mit:

g++ PQescapeLiteral_test.cpp -lpq 

oder sogar mit:

g++ PQescapeLiteral.cpp -I/usr/include/pgsql:/usr/include/pgsql/server:/usr/include/pgsql/server/libpq -lpq 

ich den Fehler:

PQescapeLiteral.cpp: In function ‘int main()’: 
PQescapeLiteral.cpp:12: error: ‘PQescapeLiteral’ was not declared in this scope 

I PQescapeLiteral im Handbuch für pgsql gefunden 9.0 in Abschnitt 31.3.4 .: Entweichende Strings f oder Einschluss in SQL-Befehle. Ich habe die neueste Version von libpq und libpq-devel von yum, also bin ich ziemlich sicher, dass es definiert werden soll.

Wenn mir jemand in die richtige Richtung zeigen kann, würde ich es begrüßen.

Antwort

1

Es funktioniert gut für mich, mit PostgreSQL 9.0.1 Header. Welche Version der postgresql-Header und Bibliothek verwenden Sie? PQescapeLiteral wurde anscheinend in 9.0 hinzugefügt: http://developer.postgresql.org/pgdocs/postgres/release-9-0.html#AEN104548

Wo erwarten Sie libpq.so zu sein? Sie zeigen einen Compilerbefehl mit -I an, um die Headerdateien an einem nicht standardmäßigen Speicherort zu suchen, aber keinen entsprechenden -L-Schalter, um die Bibliothek zu finden.

+0

libpqxx i686 1: 3.0.2-4.fc13 fedora libpqxx-devel i686 1: 3.0.2-4.fc13 fedora ... postgres 8.4.5 ... das könnte es sein! Ich werde versuchen, das Neueste zu installieren :) – KeatsKelleher