데이터베이스 서버에 대한 연결이 성공적으로 이루어지면 설정된 경우 여기에 설명된 함수는 SQL을 수행하는 데 사용됩니다. 쿼리 및 토토 커뮤니티.
PQexec다음에 명령을 제출하세요
서버에 접속하고 결과를 기다립니다.
PGresult *PQexec(PGconn *conn,
const char *쿼리);
a를 반환토토 커뮤니티.PGresult포인터
또는 NULL 포인터일 수도 있습니다. NULL이 아닌 포인터는
메모리가 부족한 경우를 제외하고는 일반적으로 반환됩니다.
토토 커뮤니티을 보낼 수 없는 등의 심각한 오류
백엔드. NULL이 반환되면 a처럼 처리되어야 합니다.PGRES_FATAL_ERROR결과. 사용PQerrorMessage더 많이 얻으려면
오류에 대한 정보입니다.
그PGresult구조
백엔드에서 반환된 결과를 캡슐화토토 커뮤니티.libpq응용 프로그램 프로그래머는 조심해야 토토 커뮤니티
유지하기 위해PGresult추상화. 아래 접근자 기능을 사용하여
내용PGresult. 피하다
의 필드를 직접 참조토토 커뮤니티.PGresult주제이기 때문에 구조
앞으로는 변할 것이다. (시작부터)PostgreSQL6.4, 정의구조체 PGresult제공되지도 않습니다libpq-fe.h. 오래된 코드가 있는 경우
액세스PGresult필드를 직접 입력하고,
포함하면 계속 사용할 수 있습니다.libpq-int.h또한 문제를 해결하는 것이 좋습니다.
코드는 곧 제공됩니다.)
PQresultStatus다음을 반환합니다.
명령의 결과 상태입니다.
ExecStatusType PQresultStatus(const PGresult *res)
PQresultStatus반환 가능
다음 값 중 하나:
PGRES_EMPTY_QUERY-- 백엔드로 전송된 문자열이 비어 있습니다.
PGRES_COMMAND_OK-- no를 반환하는 토토 커뮤니티이 성공적으로 완료되었습니다. 데이터
PGRES_TUPLES_OK-- 쿼리가 성공적으로 실행되었습니다.
PGRES_COPY_OUT-- 복사 (서버에서) 데이터 전송이 시작되었습니다.
PGRES_COPY_IN-- 복사 (서버로) 데이터 전송이 시작되었습니다.
PGRES_BAD_RESPONSE-- 서버의 응답을 이해할 수 없습니다.
PGRES_NONFATAL_ERROR
PGRES_FATAL_ERROR
결과 상태가 다음과 같은 경우PGRES_TUPLES_OK, 루틴 설명 아래는 에서 반환된 행을 검색하는 데 사용할 수 있습니다. 쿼리. 검색하는 데 발생하는 SELECT 토토 커뮤니티에 유의하세요. 0개의 행이 여전히 표시됩니다.PGRES_TUPLES_OK. PGRES_COMMAND_OK는 다음을 수행할 수 있는 명령용입니다. 행(INSERT, UPDATE 등)을 반환하지 않습니다. 의 응답PGRES_EMPTY_QUERY종종 노출 클라이언트 소프트웨어의 버그입니다.
PQresStatus변환토토 커뮤니티
에서 반환된 열거 유형PQresultStatus문자열 상수로
상태 코드를 설명토토 커뮤니티.
char *PQresStatus(ExecStatusType 상태);
PQresultErrorMessage쿼리와 관련된 오류 메시지를 반환토토 커뮤니티.
오류가 없으면 빈 문자열입니다.
char *PQresultErrorMessage(const PGresult *res);
즉시 다음PQexec또는PQgetResult전화,PQerrorMessage(연결 시)는
와 동일한 문자열을 반환토토 커뮤니티.PQresultErrorMessage(결과에 대해).
그러나 aPGresult유지됩니다
오류 메시지는 파괴될 때까지 표시되지만 연결은
후속 작업이 완료되면 오류 메시지가 변경됩니다.
완료. 사용PQresultErrorMessage원할 때
특정과 관련된 상태를 알 수 있습니다.PGresult; 사용PQerrorMessage당신이 알고 싶을 때
연결에 대한 최신 작업의 상태입니다.
PQclear저장공간 확보
와 연관됨PGresult.
모든 쿼리 결과는 다음을 통해 해제되어야 합니다.PQclear더 이상 필요하지 않은 경우.
void PQclear(PQresult *res);
당신은 다음을 유지할 수 있습니다.PGresult필요한 한 계속해서 반대하십시오. 그것은 가지 않는다
새 쿼리를 실행하거나 쿼리를 닫더라도
연결. 이를 제거하려면 전화해야 토토 커뮤니티.PQclear. 이를 수행하지 않으면 결과가 발생토토 커뮤니티.
프런트엔드 애플리케이션에서 메모리 누수가 발생했습니다.
PQmakeEmptyPGresult비어 있는 구성PGresult주어진 상태의 개체입니다.
PGresult* PQmakeEmptyPGresult(PGconn *conn, ExecStatusType 상태);
이것은libpq의
빈 공간을 할당하고 초기화하는 내부 루틴PGresult객체. 수출된다
일부 응용 프로그램에서는 결과를 생성하는 것이 유용하다고 생각하기 때문에
개체(특히 오류 상태의 개체)
스스로. 만약에콘아님
NULL 및 상태는 오류를 나타냅니다. 연결의
현재 오류 메시지는PGresult.참고하세요PQclear결국 호출되어야 함
a와 마찬가지로 객체PGresult반환자libpq그 자체.
PQescapeStringConn이스케이프
SQL 명령 내에서 사용할 문자열입니다. 이는 다음과 같은 경우에 유용합니다.
SQL 명령에 데이터 값을 리터럴 상수로 삽입합니다.
특정 문자(예: 따옴표 및 백슬래시)는 다음과 같아야 합니다.
특별히 해석되는 것을 방지하기 위해 이스케이프 처리했습니다.
SQL 파서.PQescapeStringConn이 작업을 수행토토 커뮤니티.
팁:올바른 행동을 하는 것이 특히 중요합니다 로부터 수신된 문자열을 처리할 때 이스케이프 처리 신뢰할 수 없는 출처. 그렇지 않으면 보안 위험이 있습니다. 당신은 다음에 취약합니다."SQL 주입"원치 않는 SQL 토토 커뮤니티이 포함된 공격 데이터베이스에 공급됩니다.
size_t PQescapeStringConn(PGconn *conn,
char *to, const char *from, size_t 길이,
int *오류);
PQescapeStringConn다음을 작성합니다
이스케이프 버전의부터문자열을에버퍼,
해를 끼치 지 않도록 특수 문자를 이스케이프 처리합니다.
종료 0바이트를 추가합니다. 작은따옴표는 다음과 같습니다.
서라운드PostgreSQL문자열
리터럴은 결과 문자열에 포함되지 않습니다. 그들은 그래야 한다
결과가 삽입되는 SQL 토토 커뮤니티에 제공됩니다.
매개변수from다음을 가리킵니다.
이스케이프할 문자열의 첫 번째 문자 및길이매개변수는
이 문자열의 바이트 수입니다. 종료 0바이트는 그렇지 않습니다.
필수이며 여기에 포함되어서는 안 됩니다.길이. (종료 0바이트가 발견된 경우
전에길이바이트는
처리됨,PQescapeStringConn0에서 멈춥니다. 따라서 동작은 다소 다음과 같습니다strncpy.) 에다음을 수행할 수 있는 버퍼를 가리켜야 합니다.
값의 두 배보다 적어도 1바이트 더 많은 바이트를 보유합니다.길이, 그렇지 않으면 동작
정의되지 않았습니다. 다음과 같은 경우에도 동작이 정의되지 않습니다.에그리고from문자열이 겹칩니다.
만약에오류매개변수가 아닙니다.
NULL이면*오류다음에 0으로 설정됩니다.
성공, 오류 시 0이 아님. 현재 가능한 유일한 오류
조건에 소스의 잘못된 멀티바이트 인코딩이 포함됩니다.
문자열. 오류 발생 시 출력 문자열이 계속 생성되지만
서버가 잘못된 형식으로 거부할 것으로 예상할 수 있습니다. 켜짐
오류가 발생하면 적절한 메시지가에 저장됩니다.콘객체, 여부오류NULL입니다.
PQescapeStringConn반환
쓴 바이트 수에,
종료 0바이트는 포함하지 않습니다.
size_t PQescapeString(char *to, const char *from, size_t 길이);
PQescapeString더 오래됐고,
더 이상 사용되지 않는 버전PQescapeStringConn; 차이점은 그것이다
걸리지 않습니다콘또는오류매개변수. 때문에
이는 연결에 따라 동작을 조정할 수 없습니다.
속성(예: 문자 인코딩) 및 따라서잘못된 결과를 초래할 수도 있습니다
결과. 또한 오류를 보고할 방법도 없습니다.
조건.
PQescapeString사용 가능
에서만 작동하는 단일 스레드 클라이언트 프로그램에서 안전하게
하나PostgreSQL연결
시간(이 경우 알아야 할 내용을 찾을 수 있습니다."뒤에서"). 다른 곳에서는
상황에 따라 보안 위험이 있으므로 피해야 토토 커뮤니티.
의PQescapeStringConn.
PQescapeByteaConn다음을 사용하여 SQL 명령 내에서 사용하기 위해 바이너리 데이터를 이스케이프합니다. 유형바이테아.
부호 없는 문자 *PQescapeByteaConn(PGconn *conn,
const unsigned char *from,
size_t from_length,
size_t *to_length);
특정 바이트 값반드시탈출됨(그러나 모두
바이트 값할 수 있습니다이스케이프됨) a의 일부로 사용되는 경우바이테아문자 그대로SQL문. 일반적으로 탈출하려면
바이트는 세 자리 8진수로 변환됩니다.
옥텟 값과 동일하고 앞에 1개 또는 2개가 옵니다.
백슬래시. 작은따옴표(') 및 백슬래시(\) 문자에는 특별한 대안이 있습니다.
이스케이프 시퀀스.PQescapeByteaConn이것을 수행토토 커뮤니티
최소한으로 필요한 것만 이스케이프하는 작업
바이트.
그from매개변수
문자열의 첫 번째 바이트를 가리킨다.
탈출했고, 그리고from_length매개변수는 숫자를 제공합니다.
이 바이너리 문자열의 바이트 수입니다. (종료 0바이트
필요하지도 않고 계산되지도 않습니다.) Theto_length매개변수는 다음을 가리킵니다.
결과적으로 이스케이프된 문자열을 보유할 변수
길이. 이 결과 문자열 길이에는 다음이 포함됩니다.
결과의 0바이트를 종료합니다.
PQescapeByteaConn이스케이프된 버전을 반환토토 커뮤니티.from메모리의 매개변수 바이너리 문자열
으로 할당됨malloc().
이 메모리는 다음을 사용하여 해제되어야 합니다.무료()결과가 더 이상 그렇지 않을 때
필요토토 커뮤니티. 반환 문자열에는 모든 특수 문자가 있습니다.
해당 파일이 적절하게 처리될 수 있도록 교체되었습니다.포스트그레SQL문자열
리터럴 파서 및바이테아입력
기능. 종료 0바이트도 추가됩니다. 는
둘러싸야 하는 작은따옴표PostgreSQL문자열 리터럴은 그렇지 않습니다.
결과 문자열의 일부입니다.
오류 발생 시, NULL 포인터가 반환되며 적절한
오류 메시지는에 저장됩니다.콘객체. 현재 유일한
가능한 오류는 결과를 저장할 메모리가 부족하다는 것입니다.
문자열.
PQescapeByteaPQescapeBytea은
이전 버전, 더 이상 사용되지 않는 버전PQescapeByteaConn.
부호 없는 문자 *PQescapeBytea(부호 없는 문자 *from,
size_t from_length,
size_t *to_length);
유일한 차이점은PQescapeByteaConn그렇군요PQescapeBytea다음을 취하지 않습니다PGconn매개변수. 때문에
따라서 상황에 따라 동작을 조정할 수 없습니다.
연결 속성 및 따라서잘못된 결과를 가져올 수도 있습니다
결과. 또한 오류를 반환할 방법이 없습니다.
실패 시 메시지.
PQescapeBytea될 수 있습니다
작동하는 단일 스레드 클라이언트 프로그램에서 안전하게 사용됩니다.
하나만으로PostgreSQL한 번에 연결(이 경우 무엇인지 알아낼 수 있음)
알아야 해."뒤에
장면"). 다른 맥락에서는 보안입니다.
위험하므로 피해야 토토 커뮤니티.PQescapeByteaConn.
PQunescapeBytea바이너리 데이터의 문자열 표현을 다음으로 변환합니다.
이진 데이터 --- 반대PQescapeBytea. 이는 다음과 같은 경우에 필요합니다.
검색 중바이테아텍스트의 데이터
형식이지만 바이너리 형식으로 검색할 때는 그렇지 않습니다.
부호 없는 문자 *PQunescapeBytea(부호 없는 문자 *from, size_t *to_length);
그from매개변수
다음에서 반환될 수 있는 문자열을 가리킵니다.PQgetvalue적용할 때
에바이테아열.PQunescapeBytea이 문자열을 변환합니다
표현을 이진 표현으로 변환합니다. 그것은 반환
로 할당된 버퍼에 대한 포인터malloc(), 오류 시 null, 그리고
버퍼의 크기to_length. 결과는 해제되어야 토토 커뮤니티.
사용 중무료()아니요일 때
더 이상 필요하지 않습니다.
이 변환은 정확히 반대가 아닙니다.PQescapeBytea, 왜냐하면
문자열은 그렇지 않을 것으로 예상됩니다."탈출"다음에서 수신할 때PQgetvalue. 특히 이것은 의미합니다
문자열 인용을 고려할 필요가 없습니다.
그러니 a가 필요없어요PGconn매개변수.
PQntuples다음을 반환합니다.
쿼리 결과의 튜플(행) 수입니다.
int PQntuples(const PGresult *res);
PQn필드다음을 반환합니다.
쿼리의 각 행에 있는 필드(열) 수
결과.
int PQnfields(const PGresult *res);
PQfname필드를 반환합니다.
(열) 주어진 필드 인덱스와 연관된 이름입니다. 필드
인덱스는 0부터 시작합니다.
char *PQfname(const PGresult *res,
int field_index);
PQf번호다음을 반환합니다.
해당 필드와 연관된 필드(열) 인덱스
이름.
int PQfnumber(const PGresult *res,
const char *필드_이름);
주어진 이름이 일치하지 않는 경우 -1이 반환됩니다. 필드.
PQftype필드를 반환합니다.
주어진 필드 인덱스와 연관된 유형입니다. 정수
반환된 것은 해당 유형의 내부 코딩입니다. 필드 인덱스
0부터 시작하세요.
Oid PQftype(const PGresult *res,
int field_index);
시스템 테이블을 쿼리할 수 있습니다.pg_type이름과 속성을 얻으려면 다양한 데이터 유형.OID31214_31268src/include/catalog/pg_type.h소스에서 나무.
PQfmod다음을 반환합니다.
연관된 필드의 유형별 수정 데이터
주어진 필드 인덱스로. 필드 인덱스는 0부터 시작합니다.
int PQfmod(const PGresult *res,
int field_index);
PQfsize크기를 반환합니다.
해당 필드와 연관된 필드의 바이트 단위
색인. 필드 인덱스는 0부터 시작합니다.
int PQfsize(const PGresult *res,
int field_index);
PQfsize공간을 반환토토 커뮤니티.
데이터베이스 튜플에서 이 필드에 할당됩니다.
서버의 이진 표현 크기를 의미토토 커뮤니티.
데이터 유형. 필드가 가변적이면 -1이 반환됩니다.
크기.
PQbinaryTuples1을 반환합니다.
만약에PGresult바이너리 포함
튜플 데이터, ASCII 데이터가 포함된 경우 0입니다.
int PQbinaryTuples(const PGresult *res);
현재 바이너리 튜플 데이터는 다음을 통해서만 반환될 수 있습니다. 바이너리 커서에서 데이터를 추출하는 쿼리입니다.
PQgetvalue다음을 반환합니다.
a의 한 튜플(행)에 대한 단일 필드(열) 값PGresult. 튜플과 필드
인덱스는 0부터 시작합니다.
char* PQgetvalue(const PGresult *res,
정수 tup_num,
int field_num);
대부분의 쿼리에서 반환된 값은PQgetvalueNull 종료 문자입니다.
속성 값의 문자열 표현입니다. 하지만 만일PQbinaryTuples()1이고,
에서 반환된 값PQgetvalue은 내부 유형의 이진 표현입니다.
백엔드 서버의 형식(크기는 포함되지 않음)
단어(필드가 가변 길이인 경우). 그 다음은
데이터를 캐스팅하고 변환하는 것은 프로그래머의 책임입니다.
올바른 C 유형. 에서 반환된 포인터PQgetvalue일부인 저장소를 가리킵니다.
의PGresult구조. 하나
수정해서는 안 되며 명시적으로 복사해야 토토 커뮤니티.
그 가치가 만료된 이후에 사용될 경우 다른 저장소에 귀속됩니다.
일생 동안PGresult구조 자체.
PQgetisnull필드를 테스트합니다
NULL 항목의 경우. 튜플 및 필드 인덱스는 0부터 시작합니다.
int PQgetisnull(const PGresult *res,
정수 tup_num,
int field_num);
이 함수는 필드에 NULL이 포함되어 있으면 1, 0을 반환합니다.
null이 아닌 값이 포함된 경우. (참고하세요PQgetvalue빈 문자열을 반환합니다.
NULL 필드의 경우 널 포인터가 아닙니다.)
PQgetlength다음을 반환합니다.
필드(속성) 값의 길이(바이트)입니다. 튜플과
필드 인덱스는 0부터 시작합니다.
int PQgetlength(const PGresult *res,
정수 tup_num,
int field_num);
이것은 특정 데이터에 대한 실제 데이터 길이입니다
값, 즉 가 가리키는 객체의 크기입니다.PQgetvalue. 참고하세요
문자로 표현된 값, 이 크기는 거의 관련이 없습니다.
보고된 바이너리 크기로PQfsize.
PQprint모든 내용을 인쇄토토 커뮤니티.
튜플 및 선택적으로 속성 이름
지정된 출력 스트림.
void PQprint(FILE* fout, /* 출력 스트림 */
const PGresult *res,
const PQprintOpt *po);
구조체
pqbool 헤더; /* 출력 필드 제목과 행 개수를 인쇄합니다 */
pqbool 정렬; /* 필드 채우기 채우기 */
pqbool 표준; /* 오래된 뇌사 형식 */
pqbool html3; /* HTML 테이블 출력 */
pqbool 확장; /* 테이블 확장 */
pqbool 호출기; /* 필요한 경우 출력을 위해 호출기를 사용합니다 */
char *fieldSep; /* 필드 구분자 */
char *tableOpt; /* HTML에 삽입테이블 ...*/
문자 *캡션; /* HTML캡션*/
char **필드명; /* null로 끝나는 대체 필드 이름 배열 */
PQprintOpt;
이 기능은 이전에 다음에서 사용되었습니다.psql질의 결과를 인쇄하려면, 하지만 이것은 더 이상 그렇지 않으며 이 기능도 더 이상 작동하지 않습니다. 적극적으로 지원합니다.
PQcmd상태다음을 반환합니다.
생성된 SQL 명령의 명령 상태 문자열PGresult.
char * PQcmdStatus(PGresult *res);
PQcmdTuples다음을 반환합니다.
SQL 명령의 영향을 받은 행 수입니다.
char * PQcmdTuples(PGresult *res);
만약에SQL토토 커뮤니티 생성된 것은PGresult이었어 INSERT, UPDATE 또는 DELETE, 다음을 포함하는 문자열을 반환합니다. 영향을 받는 행 수 명령이 무엇이든 있었다면 그렇지 않으면 빈 문자열을 반환합니다.
PQoid값다음을 반환합니다.
삽입된 행의 객체 ID(SQL명령은 다음을 삽입한 INSERT였습니다.
OID가 있는 테이블에 정확히 하나의 행이 있습니다. 그렇지 않으면,
반품InvalidOid.
Oid PQoidValue(const PGresult *res);
유형오이드그리고 상수InvalidOid다음과 같이 정의됩니다. 다음을 포함합니다.libpq헤더 파일. 둘 다 정수 유형입니다.
PQoidStatus다음을 반환합니다.
삽입된 행의 객체 ID가 있는 문자열(SQL명령은
삽입. (문자열은 다음과 같습니다.0만일
INSERT가 정확히 하나의 행을 삽입하지 않았거나 대상이
테이블에는 OID가 없습니다.) 명령이
INSERT, 빈 문자열을 반환합니다.
char * PQoidStatus(const PGresult *res);
이 기능은 다음을 위해 더 이상 사용되지 않습니다.PQoid값그리고 스레드로부터 안전하지 않습니다.