현재 아래코드 자체는 큰 에러가 없는 것 같습니다. 물론 res 라든가 buf 등의 자료형 및 그 크기는 적당히 설정되어 있을 것으로 생각됩니다.
그리고 Query 실행결과를 받고 나서 그 return 결과를 확인할때 다음을 반드시 명심하시기 바랍니다.
PGRES_EMPTY_QUERY // backend (postmaster) 로 보낸 문자열이 비어 있을 경우.
PGRES_COMMAND_OK // 서버로 명령(접속 명령어등)가 성공적으로 실행되고, 그 결과로
돌아오는 tuple 이 없을 경우 사용.
PGRES_TUPLES_OK // Query 가 성공적으로 수행되었을 경우
PGRES_COPY_OUT // Server 로 부터 자료 전송이 시작된 경우.
PGRES_COPY_IN // 서버로 자료 전송이 시작된 경우.
PGRES_BAD_RESPONSE // 서버의 반응을 이해할 수 없는 경우 발생.
PGRES_NONFATAL_ERROR
PGRES_FATAL_ERROR
대부분의 사람들이 PGRES_COMMAND_OK 와 PGRES_TUPLES_OK 의 사용법을 헤깔려 하고 잘못 사용하는 경우가 왕왕 있더군요.
>>이태웅 님께서 쓰시길<<
:: PGconn *pc119;
:: PGresult *res;
::
:: pghost = NULL;
:: pgport = NULL;
:: pgoptions = NULL;
:: pgtty = NULL;
:: dbName = "wboard";
:: login = "postgres";
:: pwd = NULL;
::
:: pc119 = PQsetdbLogin(pghost, pgport, pgoptions, pgtty, dbName, login, pwd);
::
:: if (PQstatus(pc119) == CONNECTION_BAD)
:: {
:: printf("'%s'DB의 접속에 실패했습니다.<br>", dbName);
:: printf("%s", PQerrorMessage(pc119));
:: exit_nicely(pc119);
:: }
::
:: res = PQexec(pc119, buf);
::
:: printf("%s",buf);
::
:: if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
:: {
:: printf("저장오류");
:: PQclear(res);
:: exit_nicely(pc119);
:: } 소스중 중요한건 이부분이고요~
:: //////////////////////////////////////
:: insert into profile(name, id, password, email, per_num, hp_num, addr_num, home_addr, home_phone,
:: quiz, answer) values('XXX', 'XXXX', '1111', 'XXXX@hanmail.net', 'XXXXXX/1772421', '011/XXX/0865
:: ', '121020', '서울특별시 마포구 공덕동 모냐', '02/574/7440', '모냐', '답')저장오류
:: ////////////////
:: 이부분은 결과메시지입니다.
:: 저장오류라는 글이 나오기전까지의 부분을 복사해서 psql에서 직접 명령을 주면...
:: 잘만.. 실행됩니다.
:: if (PQresultStatus(res) != PGRES_COMMAND_OK)
:: {
:: if (PQresultStatus(res)==PGRES_FATAL_ERROR)
:: {
:: printf("PGRES_FATAL_ERROR");
:: }
:: printf("명령문실패!\n");
:: PQclear(res);
:: exit_nicely(pc119);
:: }
:: 이런식으로 위의 부분을 고치면 PGRES_FATAL_ERROR 로 출력이 됩니다.
:: 조언 부탁드립니다. ㅠ.ㅠ
|