Van egy C programom, ami postgres adatbázist tölt fel adatokkal, illetve egy weblapom, ami ebből olvasgat. PHP-vel tökéletesen tudok kapcsolódni a szerverhez, a C-vel viszont gondok vannak.
Az adatbázissal kapcsolatos részek:
void clearres() {
if(res) {
PQclear(res);
res = NULL;
}
}
void db_end() {
printf("exiting...\n");
clearres();
PQfinish(conn);
exit(0);
}
void checkconn() {
PQconsumeInput(conn);
if(PQstatus(conn) == CONNECTION_OK)
return;
printf("connection lost, reconnecting...\n");
PQreset(conn);
if(PQstatus(conn) == CONNECTION_OK)
return;
printf("can't connect to database\n");
db_end();
}
void execquery(char *cmd, const char **par, int npar, ExecStatusType expected) {
checkconn();
clearres();
res = PQexecParams(conn, cmd, npar, NULL, par, NULL, NULL, 0);
if(PQresultStatus(res) == expected)
return;
}
void write_cur() {
char *query[255];
/* itt még némi finomítás */
execquery(*query,NULL,0,PGRES_COMMAND_OK);
}
int main( int argc, char *argv[] ) {
// init
conn = PQsetdbLogin("localhost","5432",NULL,NULL,"*","*","*");
checkconn();
//execquery("BEGIN;",NULL,0,PGRES_COMMAND_OK);
/* némi kód itt is, a program többi részével kapcsolatos */
//execquery("COMMIT;",NULL,0,PGRES_COMMAND_OK);
db_end();
return 0;
}
A query ami lefut az jó, mert kézzel beírva működik.
Valami ötletetek van? Hol lehet a baj?
- 1342 megtekintés
Hozzászólások
Elfeljtetted leírni, hogy _mi_ a gond.
- A hozzászóláshoz be kell jelentkezni
Az a baj, hogy nem történik semmi. Nem látom a nyomát az adatbázisban semminek, pedig több ezer rekordot kellene beszúrnia.
---------
WARNING: Linux requires you to type! After rebooted to Windows, you can safely unplug your keyboard.
- A hozzászóláshoz be kell jelentkezni
Használd a PQconnectdb-t:
PGconn *conhnd=PQconnectdb("");
- A hozzászóláshoz be kell jelentkezni
sor kicserélve:
conn=PQconnectdb("host=localhost port=5432 dbname=* user=* password=*");
Az eredmény ugyanaz (azaz semmi)
---------
WARNING: Linux requires you to type! After rebooted to Windows, you can safely unplug your keyboard.
- A hozzászóláshoz be kell jelentkezni
Mondhatnál hibakódot.
Megnézhetnéd, hogy fel tudja-e oldani a localhost-ot,
vagy írj helyette 127.0.0.1-et.
A saját programomban ez van:
conn=PQconnectdb("");
azaz üres string, amivel a home-omban futó
szerverre, a saját userid-mmel egyező nevű
adatbázisba tudok jelszó nélkül belépni.
- A hozzászóláshoz be kell jelentkezni
ha azonos a gép, akkor lehetne próbálkozni socketen keresztül csatlakozni, perl-ben már jártam úgy h vmiért csak úgy ment.
- A hozzászóláshoz be kell jelentkezni
perror-ral vagy siman a hibakodra guglizassal deritsd ki mi a baja. Most latom, mar irta mas is:).
- A hozzászóláshoz be kell jelentkezni
Nem értek a c hez (nagyon nem), de nem világos számomra, hogy a connectálás nem megy, vagy a tranzakció nem commitolódik. Első blikkre mintha connectálna, csak nem commitolna.
Hogy a connect megy az vszínű látszik a logokbók.
A második esetre tegyél bele valami hosszú várakozást, amíg még tart a kapcsolat és a tranzakció, és nézd meg pgAdmin-nal, hogy tényleg ott van-e a nyitott tranzakció. Ha ott van, akkor a committal lesz a baj.
Vagy csak próbálj meg selectelni és kiírni adatokat. Ha a select megy és az insert nem, akkor megint csak a tranzakciókezelés gyanús.
(PHP-be nekem autokatikus auto-commit beállítás rémlik)
- A hozzászóláshoz be kell jelentkezni
A transactionkezelést kicommenteltem, hátha az lenne a hibás, de nem az. A kapcsolat tuira létrejön, mivel kapcsolódás után meghívom a checkconn() fgv-t, illetve minden query előtt is meghívom.
Belepakoltam pár hibaüzenet kijelzőt, és végül a gond az lett, hogy elfelejtettem privilégiumot adni az adott usernek egy szekvenciára, ami gond, mert az kell az inserteléshez. Bocsánat, akit feltartottam, én voltam a hülye.
---------
WARNING: Linux requires you to type! After rebooted to Windows, you can safely unplug your keyboard.
- A hozzászóláshoz be kell jelentkezni