이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 32.3. 토토 꽁 머니 실행 함수버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

1.3. 명령 실행 함수

데이터베이스 서버에 대한 연결이 성공적으로 성공하면 여기에 설명 된 기능은 SQL을 수행하는 데 사용됩니다. 쿼리 및 명령.

1.3.1. 주요 루틴

  • PQEXEC명령을 제출하십시오 서버와 결과를 기다립니다.

    토토 커뮤니티 *pqexec (pgconn *conn,
                     const char *query);

    반환 a토토 커뮤니티포인터 또는 아마도 널 포인터 일 수 있습니다. 널이 아닌 포인터가 있습니다 일반적으로 메모리 외 조건을 제외하고 반환됩니다 명령을 백엔드. 널이 반환되면 A처럼 취급해야합니다.pgres_fatal_error결과. 사용PQERRORMESSAGE더 많은 것을 얻으려면 오류에 대한 정보.

the토토 커뮤니티구조 백엔드에 의해 반환 된 결과를 캡슐화합니다.libpq응용 프로그램 프로그래머는 조심해야합니다 유지하려면토토 커뮤니티추상화. 아래의 액세서 기능을 사용하여 의 내용토토 커뮤니티. 피하다 의 필드를 직접 참조토토 커뮤니티구조가 주제이기 때문에 구조 미래에 변화. (시작PostgreSQL6.4, 정의struct 토토 커뮤니티|libpq-fe.h. 오래된 코드가 있다면 액세스토토 커뮤니티직접 필드, 를 포함하여 계속 사용할 수 있습니다libpq-int.h도 고치는 것이 좋습니다 곧 코드.)

  • pqresultstatus반환합니다 명령의 결과 상태.

    execstatustype pqresultstatus (const 토토 커뮤니티 *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, 그런 다음 루틴이 설명되어 있습니다 아래는 질문. 검색되는 선택된 명령 제로 행이 여전히 표시pgres_tuples_ok. pgres_command_ok는 할 수있는 명령입니다 행을 반환하지 마십시오 (삽입, 업데이트 등). 의 응답pgres_empty_query종종 a 클라이언트 소프트웨어의 버그.

  • pqresstatus변환 열거 된 유형pqresultstatus문자열 상수로 상태 코드 설명.

    char *pqresstatus (execstatustype status);
  • PQRESULTERRORMESSAGE쿼리와 관련된 오류 메시지를 반환합니다. 오류가없는 경우 빈 문자열.

    char *pqresulterrormessage (const 토토 커뮤니티 *res);

    바로 다음PQEXEC또는pqgetresultCall,PQERRORMESSAGE(연결 중) 와 같은 문자열을 반환합니다.PQRESULTERRORMESSAGE(결과에서). 그러나 A토토 커뮤니티유지됩니다 연결은 파괴 될 때까지 오류 메시지입니다 후속 작업이있을 때 오류 메시지가 변경됩니다 완료. 사용PQRESULTERRORMESSAGE원할 때 특정 상태를 알고 있습니다토토 커뮤니티; 사용PQERRORMESSAGE당신이 알고 싶을 때 연결에서 최신 작업의 상태.

  • PQCLEAR스토리지를 해제합니다 관련토토 커뮤니티. 모든 쿼리 결과는를 통해 해제되어야합니다.PQCLEAR더 이상 필요하지 않은 경우.

    void pqclear (pqresult *res);

    당신은 a를 유지할 수 있습니다.토토 커뮤니티필요한 한 오랫동안 객체; 가지 않습니다 새 쿼리를 발행하거나 닫을 때도 연결. 제거하려면 전화해야PQCLEAR. 이렇게하지 않으면 발생합니다 프론트 엔드 애플리케이션에서 메모리 누출.

  • pqmakeemptypy토토 커뮤니티공허한 구성토토 커뮤니티지정된 상태를 가진 객체.

    토토 커뮤니티 * pqmakeemptypy토토 커뮤니티 (pgconn * conn, execstatustype 상태);

    이것은libpq's 빈 내부 루틴을 할당하고 초기화하는토토 커뮤니티개체. 수출됩니다 일부 응용 프로그램에서 결과를 생성하는 것이 유용하다고 생각하기 때문입니다 개체 (특히 오류 상태가있는 개체) 그들 자신. 만약에conn그렇지 않습니다 null 및 상태는 오류, 연결을 나타냅니다 현재 오류 메시지가에 복사됩니다.토토 커뮤니티.참고PQCLEAR결국 호출해야합니다 객체,와 마찬가지로토토 커뮤니티returned bylibpq자체.

1.3.2. 에스케이프 끈 SQL 명령 포함

PQESCAPESTRINGCONN탈출 a SQL 명령 내에서 사용하기위한 문자열. 이것은 다음에 유용합니다 SQL 명령에서 데이터 값을 문자 그대로 상수로 삽입합니다. 특정 문자 (예 : 따옴표 및 백 슬래시)는 있어야합니다 그들이 특별히 해석되는 것을 막기 위해 탈출했습니다. SQL Parser.PQESCAPESTRINGCONN이 작업을 수행합니다.

팁 :적절한 일을하는 것이 특히 중요합니다 an에서받은 문자열을 처리 할 때 탈출 신뢰할 수없는 출처. 그렇지 않으면 보안 위험이 있습니다. 당신은 취약합니다"SQL 주입"원치 않는 SQL 명령이있는 공격 데이터베이스에 공급.

SIZE_T PQESCAPESTRINGCONN (PGCONN *CONN,
                           char *to, const char *from, size_t 길이,
                           int *error);

PQESCAPESTRINGCONN쓰기 탈출 한 버전의FromString to theto버퍼, 해를 끼칠 수 없도록 특수 캐릭터를 피하고 그리고 종료 제로 바이트를 추가합니다. 해야 할 단일 인용문 서라운드PostgreSQL문자열 리터럴은 결과 문자열에 포함되지 않습니다. 그들은해야합니다 SQL 명령에 결과가 삽입되어 제공됩니다. 매개 변수From탈출 할 문자열의 첫 번째 문자, 그리고길이매개 변수는 다음을 제공합니다 이 문자열의 바이트 수. 종료 제로 바이트는 아닙니다 필수, 계산해서는 안됩니다길이. (종료 제로 바이트가 발견되는 경우 전에길이바이트는입니다 가공,PQESCAPESTRINGCONN0에서 멈 춥니 다. 그러므로 행동은 오히려Strncpy.)to할 수있는 버퍼를 가리 킵니다 값의 값의 두 배 이상 적어도 한 바이트를 유지하십시오.길이, 그렇지 않으면 행동 정의되지 않았습니다. 행동이 마찬가지로 행동이 정의되지 않습니다toandFrom문자열 중첩.

if the오류매개 변수는 아닙니다 널, 그때*오류는 0으로 설정되었습니다 성공, 0이 아닌 오류. 현재 유일한 오류입니다 조건에는 소스에서 유효하지 않은 멀티 바이트 인코딩이 포함됩니다 끈. 출력 문자열은 여전히 ​​오류에서 생성되지만 서버가 기형으로 거부 할 것으로 예상 할 수 있습니다. ~에 오류, 적절한 메시지가에 저장됩니다.conn개체, 여부오류is null.

PQESCAPESTRINGCONN반환합니다 작성된 바이트 수to, 종료 제로 바이트는 포함되지 않습니다.

SIZE_T PQESCAPESTRING (char *to, const char *from, size_t 길이);

PQESCAPESTRING는 나이가 많고 의 더 이상 사용되지 않는 버전PQESCAPESTRINGCONN; 차이점은 그것입니다 취하지 않습니다conn또는오류매개 변수. 때문에 이것은 연결에 따라 동작을 조정할 수 없습니다. 속성 (캐릭터 인코딩 등) 및 따라서잘못 될 수 있습니다 결과. 또한 오류를보고 할 방법이 없습니다 정황.

PQESCAPESTRING사용할 수 있습니다 단일 스레드 클라이언트 프로그램에서만 안전하게 작동합니다 하나PostgreSQLa 시간 (이 경우 알아야 할 사항을 찾을 수 있습니다"무대 뒤에서"). 다른 컨텍스트는 보안 위험이며 호의적으로 피해야합니다. 의PQESCAPESTRINGCONN.

1.3.3. 이진 문자열 도피 SQL 명령 포함

PQESCAPEBYTEACONN

SQL 명령 내에서 사용하기 위해 이진 데이터를 Escapes 유형BYTEA.

부호없는 char *pqescapebyteaconn (pgconn *conn,
                                 서명되지 않은 char *에서,
                                 size_t from_length,
                                 size_t *to_length);

특정 바이트 값필수탈출됩니다 (그러나 모두 바이트 값can탈출) A의 일부로 사용될 때BYTEA문자 그대로SQL진술. 일반적으로 탈출 바이트, 3 자리 숫자 옥탈 번호로 변환됩니다. 옥넷 값과 같으며 1-2 분에 앞서 백 슬래시. 단일 인용문 (') 및 백 슬래시 (\) 문자는 특별한 대안이 있습니다 탈출 시퀀스.PQESCAPEBYTEACONN이를 수행합니다 작전, 최소한으로 요구되는 것만 탈출합니다 바이트.

theFrom매개 변수 줄의 첫 바이트를 가리 킵니다. 탈출,from_length매개 변수는 숫자를 제공합니다 이 바이너리 스트링의 바이트. (종료 제로 바이트 필요하거나 계산되지 않습니다.)to_length매개 변수가 a 결과적인 탈출 문자열을 보유하는 변수 길이. 이 결과 문자열 길이에는 다음이 포함됩니다 결과의 제로 바이트 종단.

PQESCAPEBYTEACONN탈출 한 버전의 반환From메모리의 파라미터 바이너리 스트링 할당malloc (). 이 메모리는를 사용하여 해제되어야합니다.free ()결과가 더 이상 없을 때 필요합니다. 반환 문자열에는 모든 특수 문자가 있습니다 그들이 올바르게 처리 할 수 ​​있도록 교체PostgreSQL문자열 리터럴 파서,BYTEA입력 기능. 종료 제로 바이트도 추가됩니다. 그만큼 주변을 둘러싼 단일 따옴표PostgreSQL문자열 리터럴은 아닙니다 결과 문자열의 일부.

오류가 발생하면 널 포인터가 반환되고 적합합니다. 오류 메시지가에 저장됩니다.conn개체. 현재 유일한 것입니다 가능한 오류는 결과에 대한 메모리가 충분하지 않습니다 끈.

pqescapebytea

PQESCAPEBYTEAis 구형, 더 이상 사용되지 않은PQESCAPEBYTEACONN.

부호없는 char *pqescapebytea (부호없는 char *from,
                             size_t from_length,
                             size_t *to_length);

유일한 차이점PQESCAPEBYTEACONNPQESCAPEBYTEAapgconn매개 변수. 때문에 이것은에 따라 동작을 조정할 수 없습니다 연결 속성이므로잘못 될 수 있습니다 결과. 또한 오류를 반환 할 방법이 없습니다 실패에 관한 메시지.

pqescapebytea할 수 있습니다 작동하는 단일 스레드 클라이언트 프로그램에서 안전하게 사용됩니다 단 하나만PostgreSQL한 번에 연결 (이 경우 무엇을 찾을 수 있습니다. 알아야"뒤에서 장면 "). 다른 맥락에서 그것은 보안입니다 위험 및에 찬성하여 피해야합니다PQESCAPEBYTEACONN.

PQUNESCAPEBYTEA

이진 데이터의 문자열 표현을 변환합니다 이진 데이터 --- 반대PQESCAPEBYTEA. 이것은 때 필요합니다 검색BYTEA텍스트의 데이터 형식이지만 이진 형식으로 검색 할 때는 그렇지 않습니다.

부호없는 char *pqunescapebytea (size_t *to_length);

theFrom매개 변수 에 의해 반환 될 수있는 문자열을 가리 킵니다pqgetValue신청시 에이BYTEA열.PQUNESCAPEBYTEA이 문자열을 변환합니다 이진 표현으로의 표현. 돌아옵니다 로 할당 된 버퍼에 대한 포인터malloc ()또는 널 오류가 발생하여 넣습니다 버퍼의 크기to_length. 결과는 해제되어야합니다 사용free ()그렇지 않은 경우 더 오래 필요합니다.

이 변환은 정확히 반대가 아닙니다PQESCAPEBYTEA문자열은 예상되지 않습니다"탈출"|pqgetValue. 특히 이것은 의미합니다 문자열 인용 고려 사항이 필요하지 않습니다 그래서 필요 없어pgconn매개 변수.

1.3.4. 선택 결과 검색 정보

  • pqntuples반환합니다 쿼리 결과의 튜플 수 (행)

    int pqntuples (const 토토 커뮤니티 *res);
  • PQNFIELDS반환합니다 쿼리의 각 행에 필드 (열) 수 결과.

    int pqnfields (const 토토 커뮤니티 *res);
  • pqfname필드를 반환합니다 (열) 주어진 필드 인덱스와 관련된 이름. 필드 지수는 0에서 시작합니다.

    char *pqfname (const 토토 커뮤니티 *res,
                        int field_index);
  • pqfnumber반환합니다 주어진 필드와 관련된 필드 (열) 인덱스 이름.

    int pqfnumber (const 토토 커뮤니티 *res,
                  const char *field_name);

    30677_30745

  • pqftype필드를 반환합니다 주어진 필드 인덱스와 관련된 유형. 정수 반환 된 것은 유형의 내부 코딩입니다. 현장 지수 0에서 시작합니다.

    OID pqftype (const 토토 커뮤니티 *res,
                int field_index);

    시스템 테이블을 쿼리 할 수 ​​있습니다pg_type의 이름과 속성을 얻으려면 다양한 데이터 유형. 그만큼OID31299_31353SRC/포함/카탈로그/PG_TYPE.H소스에서 나무.

  • PQFMOD반환합니다 관련 필드의 유형 별 수정 데이터 주어진 필드 색인으로. 현장 지수는 0에서 시작합니다.

    int pqfmod (const 토토 커뮤니티 *res,
               int field_index);
  • pqfsize크기를 반환합니다 주어진 필드와 관련된 필드의 바이트 색인. 현장 지수는 0에서 시작합니다.

    int pqfsize (const 토토 커뮤니티 *res,
                int field_index);

    pqfsize공간을 반환합니다 이 필드에 데이터베이스 튜플에 할당되었습니다. 단어 서버의 이진 표현의 크기 데이터 유형. 필드가 가변적 인 경우 -1이 반환됩니다 크기.

  • pqbinaryTuples반환 1 인 경우토토 커뮤니티이진을 포함합니다 ASCII 데이터가 포함 된 경우 튜플 데이터, 0.

    int pqbinaryTuples (const 토토 커뮤니티 *res);

    현재 이진 튜플 데이터는 이진 커서에서 데이터를 추출하는 쿼리.

1.3.5. 선택 결과 검색 값

  • pqgetValue반환 a 단일 필드 (열) a의 1 개의 튜플 (행) 값토토 커뮤니티. 튜플과 필드 지수는 0에서 시작합니다.

    char * pqgetValue (const 토토 커뮤니티 * res,
                     int tup_num,
                     int field_num);

    대부분의 쿼리의 경우pqgetValue는 무효가 종결 된 문자입니다 속성 값의 문자열 표현. 하지만 ifpqbinaryTuples ()는 1, the 값pqgetValue내부의 유형의 이진 표현입니다. 백엔드 서버의 형식 (크기는 포함되지 않습니다. 필드가 가변 길이 인 경우 Word). 그때는입니다 데이터를 캐스팅하고 변환 할 프로그래머의 책임 올바른 C 유형. 포인터는pqgetValue일부인 스토리지를 가리 킵니다 의토토 커뮤니티구조. 하나 수정해서는 안되며 명시 적으로 복사해야합니다. 다른 스토리지에 대한 가치를 지나서 사용하려면 의 수명토토 커뮤니티구조 자체.

  • PQGETISNULL필드를 테스트합니다 널 입구. 튜플 및 현장 지수는 0에서 시작합니다.

    int pqgetisnull (const 토토 커뮤니티 *res,
                    int tup_num,
                    int field_num);

    이 함수는 필드에 null이 포함 된 경우 1, 0 널 값이 아닌 값이 포함 된 경우. (pqgetValue빈 문자열을 반환합니다. 널 필드를위한 널 포인터가 아닙니다.)

  • pqgetLength반환 바이트의 필드 (속성) 값의 길이. 튜플과 현장 지수는 0에서 시작합니다.

    int pqgetlength (const 토토 커뮤니티 *res,
                    int tup_num,
                    int field_num);

    이것은 특정 데이터의 실제 데이터 길이입니다. 값, 즉 객체의 크기입니다.pqgetValue. 주목하십시오 문자 표현 값,이 크기는 할 일이 거의 없습니다 에 의해보고 된 이진 크기로pqfsize.

  • pqprint모든 것을 인쇄합니다 튜플 및 선택적으로 속성 이름은 지정된 출력 스트림.

    void pqprint (파일* fout, /* 출력 스트림* /
                 const 토토 커뮤니티 *res,
                 const pqprintopt *po);
    
    구조 
        PQBOOL 헤더;      / * 출력 필드 제목 및 행 카운트 인쇄 */
        pqbool 정렬;       / * 채우기 필드 정렬 */
        PQBOOL 표준;    / * Old Brain Dead 형식 */
        PQBOOL HTML3;       / * 출력 HTML 테이블 */
        PQBOOL 확장;    / * 테이블 확장 */
        PQBOOL 호출기;       / * 필요한 경우 출력을 위해 호출기를 사용하십시오 */
        char *fieldsep;   / * 필드 분리기 */
        char *tableopt;   /* HTML에 삽입테이블 ...*/
        char *캡션;    /* html캡션*/
        char ** fieldname; / * NULL 교체 필드 이름의 배열 */
     pqprintopt;

    이 함수는 이전에 사용되었습니다PSQL쿼리 결과를 인쇄하려면 더 이상 경우가 아니며이 기능은 더 이상 적극적으로 지원.

1.3.6. 비 선택 결과 검색 정보

  • pqcmdstatus반환합니다 생성 된 SQL 명령에서 명령 상태 문자열 그만큼토토 커뮤니티.

    char * pqcmdstatus (토토 커뮤니티 * res);
  • pqcmdtuples반환합니다 SQL 명령에 의해 영향을받는 행 수.

    char * pqcmdtuples (토토 커뮤니티 * res);

    SQL명령 생성 한토토 커뮤니티삽입, 업데이트 또는 삭제하면 포함 된 문자열이 반환됩니다 영향을받는 줄의 수. 명령이 무엇이든 경우 그렇지 않으면 빈 문자열을 반환합니다.

  • pqoidvalue반환합니다 삽입 된 행의 객체 IDSQL명령은 삽입 된 삽입물입니다 OID가있는 테이블에 정확히 하나의 행입니다. 그렇지 않으면, 보고Invalidoid.

    OID pqoidValue (const 토토 커뮤니티 *res);

    유형OID그리고 상수Invalidoid당신은 정의됩니다 포함libpq헤더 파일. 둘 다 정수 유형이 될 것입니다.

  • pqoidstatus반환 a 삽입 된 행의 객체 ID가있는 문자열SQL명령은 an입니다 끼워 넣다. (문자열은0IF 인서트는 정확히 하나의 행을 삽입하지 않았거나 대상이 테이블에는 OID가 없습니다.) 명령이 삽입, 빈 문자열을 반환합니다.

    char * pqoidstatus (const 토토 커뮤니티 * res);

    이 기능은에 찬성하여 더 이상 사용되지 않습니다.pqoidvalue그리고 스레드-안전하지 않습니다.