이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 32.3. 토토 꽁 머니 실행 함수버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

31.3. 명령 실행 기능

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

31.3.1. 주요 기능

PQexec

서버에 명령을 제출하고 다음을 기다립니다. 결과.

PG토토 커뮤니티ult *PQexec(PGconn *conn, const char *command);

a를 반환합니다.PG토토 커뮤니티ult포인터 또는 널 포인터일 수도 있습니다. 널이 아닌 포인터는 일반적으로 메모리 부족 조건을 제외하고는 반환됩니다. 또는 명령을 보낼 수 없는 등의 심각한 오류 서버에. 그만큼PQ토토 커뮤니티ultStatus함수는 다음과 같아야 합니다. 오류에 대한 반환 값을 확인하기 위해 호출됩니다. (널 포인터의 값을 포함합니다. 이 경우 돌아올 것이다PG토토 커뮤니티_FATAL_ERROR). 사용PQerrorMessage얻다 이러한 오류에 대한 자세한 내용을 참조하세요.

명령 문자열에는 여러 SQL 명령이 포함될 수 있습니다 (세미콜론으로 구분). 단일로 전송된 여러 쿼리PQexec호출은 다음에서 처리됩니다. 명시적으로 명시되지 않는 한 단일 거래시작/커밋명령 여러 개로 나누기 위해 쿼리 문자열에 포함 업무. 그러나 반환된 내용은 다음과 같습니다.PG토토 커뮤니티ult구조는 결과만 설명합니다. 문자열에서 실행된 마지막 명령. 다음 중 하나를 수행해야 합니다. 명령이 실패하면 문자열 처리가 중지되고 반환됨PG토토 커뮤니티ult설명합니다 오류 상태입니다.

PQexecParams

서버에 명령을 제출하고 다음을 기다립니다. 결과적으로 매개변수를 별도로 전달할 수 있는 기능이 제공됩니다. SQL 명령 텍스트에서.

PG토토 커뮤니티ult *PQexecParams(PGconn *conn,
                       const char *명령,
                       정수 nParams,
                       const Oid *paramTypes,
                       const char * const *paramValues,
                       const int *paramLengths,
                       const int *paramFormats,
                       int resultFormat);

PQexecParams다음과 같습니다PQexec, 하지만 제안 추가 기능: 매개변수 값은 다음과 같습니다. 적절한 명령 문자열과 별도로 지정되며, 쿼리 결과는 텍스트 또는 바이너리로 요청할 수 있습니다. 체재.PQexecParams이다 프로토콜 3.0 이상 연결에서만 지원됩니다. 그것 프로토콜 2.0을 사용하면 실패합니다.

함수 인수는 다음과 같습니다:

명령을 보낼 연결 개체 을 통해.

명령

실행될 SQL 명령 문자열. 만약에 매개변수가 사용되며, 이는 다음에서 참조됩니다. 명령 문자열은 다음과 같습니다.$1, $2

nParams

제공된 매개변수의 수; 그것은 배열의 길이paramTypes[], paramValues[], paramLengths[]paramFormats[]. (배열 포인터는 다음과 같습니다.NULL언제nParams0입니다.)

paramTypes[]

OID로 할당할 데이터 유형을 지정합니다. 매개변수 기호에 만약에paramTypesisNULL또는 다음의 특정 요소 배열이 0이면 서버가 데이터 유형을 추론합니다. 매개변수 기호에 대해서도 같은 방식으로 유형이 지정되지 않은 리터럴 문자열에 대해 수행합니다.

paramValues[]

매개변수의 실제 값을 지정합니다. 에이 이 배열의 널 포인터는 해당하는 것을 의미합니다. 매개변수가 널입니다. 그렇지 않으면 포인터가 다음을 가리킵니다. 0으로 끝나는 텍스트 문자열(텍스트 형식의 경우) 또는 서버가 예상하는 형식의 이진 데이터 (바이너리 형식의 경우).

paramLengths[]

실제 데이터 길이를 지정합니다. 바이너리 형식 매개변수. null인 경우 무시됩니다. 매개변수 및 텍스트 형식 매개변수. 배열 바이너리가 없으면 포인터는 null이 될 수 있습니다. 매개변수.

paramFormats[]

매개변수가 텍스트인지 여부를 지정합니다( 해당 배열 항목에 0이 있습니다. 매개변수) 또는 바이너리(배열 항목에 1을 입력하세요) 해당 매개변수의 경우). 배열의 경우 포인터가 null이면 모든 매개변수는 다음과 같이 간주됩니다. 텍스트 문자열이어야 합니다.

바이너리 형식으로 전달된 값에는 지식이 필요합니다 기대하는 내부 표현의 백엔드. 예를 들어 정수를 전달해야 합니다. 네트워크 바이트 순서. 통과숫자값에는 다음에 대한 지식이 필요합니다. 구현된 서버 저장소 형식src/backend/utils/adt/numeric.c::numeric_send()그리고src/backend/utils/adt/numeric.c::numeric_recv().

결과형식

텍스트 형식으로 결과를 얻으려면 0을 지정하십시오. 또는 이진 형식으로 결과를 얻는 것입니다. (거기 현재는 다른 혜택을 받을 수 있는 조항이 아닙니다. 결과 열은 형식이 다르지만 기본 프로토콜에서 가능합니다.)

주요 이점PQexecParams이상PQexec매개변수 값은 명령 문자열과 분리되므로 지루하고 오류가 발생하기 쉬운 인용 및 이스케이프.

달리PQexec, PQexecParams최대 하나의 SQL 명령을 허용합니다. 주어진 문자열에서. (세미콜론이 들어갈 수 있지만, 비어 있지 않은 명령이 두 개 이상 있습니다.) 이는 다음의 제한 사항입니다. 기본 프로토콜이지만 추가 기능으로 유용성이 있습니다. SQL 주입 공격에 대한 방어입니다.

팁:OID를 통해 매개변수 유형을 지정하는 것은 특히 하드 와이어링을 원하지 않는 경우에는 지루합니다. 특정 OID 값을 프로그램에 추가합니다. 그러나 다음을 수행할 수 있습니다. 서버 자체가 있는 경우에도 그렇게 하지 마십시오. 매개변수 유형을 결정할 수 없거나 원하는 유형과 다릅니다. SQL 명령 텍스트에서 표시하려면 매개변수 기호에 명시적 캐스트를 첨부하세요. 어떤 데이터 유형을 보낼지. 예를 들어:

SELECT * FROM mytable WHERE x = $1::bigint;

이것은 매개변수를 강제합니다$1되다 다음과 같이 취급됨비긴트, 반면 기본적으로는 와 동일한 유형이 할당됩니다.x. 매개변수 유형 결정을 강제합니다. 이런 방식으로 또는 숫자 유형 OID를 지정하면 매개변수 값을 전송할 때 강력히 권장됩니다. 바이너리 형식(바이너리 형식은 중복성이 적기 때문) 텍스트 형식보다 서버가 유형 불일치 실수를 감지합니다.

PQprepare

다음을 사용하여 준비된 명령문을 작성하라는 요청을 제출합니다. 주어진 매개변수를 사용하고 완료될 때까지 기다립니다.

PG토토 커뮤니티ult *PQprepare(PGconn *conn,
                    const char *stmt이름,
                    const char *쿼리,
                    정수 nParams,
                    const Oid *paramTypes);

PQprepare을 생성합니다 나중에 실행하기 위해 준비된 명령문PQexec준비됨. 이 기능을 사용하면 구문 분석을 위해 반복적으로 사용되는 명령 매번 계획하는 것이 아니라 한 번만 계획하면 됩니다. 실행되었습니다.PQprepare이다 프로토콜 3.0 이상 연결에서만 지원됩니다. 그것 프로토콜 2.0을 사용하면 실패합니다.

함수는 다음과 같은 준비된 명령문을 생성합니다.stmt이름에서질의문자열, 다음을 포함해야 함 단일 SQL 명령.stmt이름될 수 있습니다""이름 없는 생성 진술, 이 경우 기존의 이름이 지정되지 않은 명령문은 자동으로 대체됩니다. 그렇지 않으면 그것은 명령문 이름이 이미 정의되어 있으면 오류가 발생합니다. 현재 세션. 매개변수를 사용하는 경우 해당 매개변수는 다음과 같습니다. 쿼리에서 다음과 같이 언급됩니다.$1, $2nParams는 다음에 대한 매개변수의 수입니다. 배열에 미리 지정된 유형paramTypes[]. (배열 포인터는 다음과 같습니다.NULL언제nParams0입니다.)paramTypes[]OID로 데이터를 지정합니다. 매개변수 기호에 할당할 유형입니다. 만약에paramTypesisNULL또는 배열이 0이면 서버는 데이터 유형을 매개변수 기호는 유형이 지정되지 않은 리터럴 문자열. 또한 쿼리는 매개변수를 사용할 수 있습니다. 다음보다 큰 숫자가 포함된 기호nParams; 데이터 유형은 다음에 대해 추론됩니다. 이 기호들도 마찬가지입니다. (보다PQdescribe준비됨찾는 수단을 위해 어떤 데이터 유형이 유추되었는지 알아보세요.)

다음과 같이PQexec, 결과는 일반적으로 aPG토토 커뮤니티ult내용이 서버 측 성공을 나타내는 개체 또는 실패. null 결과는 메모리가 부족하거나 명령을 전혀 보낼 수 없습니다. 사용PQerrorMessage더 많은 정보를 얻으려면 그러한 오류에 대해.

다음과 함께 사용하기 위해 준비된 명령문PQexec준비됨다음에 의해 생성될 수도 있습니다. SQL 실행PostgreSQL : 문서 : 9.1 : 범퍼카 토토문장. 또한 비록 없지만libpq준비된 삭제 기능 문, SQL롤 토토 : 문서 : 9.1 : 딜 로이징문은 해당 목적으로 사용될 수 있습니다.

PQexec준비됨

다음과 함께 준비된 명령문을 실행하라는 요청을 보냅니다. 매개변수를 지정하고 결과를 기다립니다.

PG토토 커뮤니티ult *PQexecPrepared(PGconn *conn,
                         const char *stmt이름,
                         정수 nParams,
                         const char * const *paramValues,
                         const int *paramLengths,
                         const int *paramFormats,
                         int resultFormat);

PQexec준비됨다음과 같습니다PQexecParams하지만 실행할 명령은 이름을 지정하여 지정됩니다. 쿼리를 제공하는 대신 이전에 준비된 명령문 끈. 이 기능을 사용하면 사용할 명령이 허용됩니다. 한 번만 반복적으로 구문 분석하고 계획하는 것이 아니라 실행될 때마다. 진술에는 다음이 있어야합니다. 현재 세션에서 이전에 준비되었습니다.PQexec준비됨지원됩니다 프로토콜 3.0 이상 연결에서만 가능합니다. 그것은 실패할 것이다 프로토콜 2.0을 사용하는 경우.

매개변수는 다음과 동일합니다.PQexecParams, 단, 쿼리 문자열 대신 준비된 문이 제공됩니다. 그리고paramTypes[]매개변수 존재하지 않습니다 (준비되었으므로 필요하지 않습니다) 명령문의 매개변수 유형은 명령문이 실행될 때 결정되었습니다. 생성됨).

PQdescribe준비됨

다음에 관한 정보를 얻기 위해 요청을 제출합니다. 준비된 명령문을 지정하고 기다립니다. 완성.

PG토토 커뮤니티ult *PQdescribePrepared(PGconn *conn, const char *stmtName);

PQdescribe준비됨응용 프로그램이 다음에 대한 정보를 얻을 수 있도록 허용합니다. 이전에 준비된 진술.PQdescribe준비됨다음에서만 지원됩니다. 프로토콜 3.0 이상 연결; 다음과 같은 경우에는 실패할 것입니다. 프로토콜 2.0을 사용합니다.

stmt이름될 수 있습니다""또는NULL에 이름이 지정되지 않은 명령문을 참조하십시오. 그렇지 않으면 다음과 같아야 합니다. 기존 준비된 문의 이름입니다. 성공하면, aPG토토 커뮤니티ult상태 있음PG토토 커뮤니티_COMMAND_OK반환됩니다. 기능PQnparams그리고PQparamtype적용 가능 이것에PG토토 커뮤니티ult얻다 준비된 매개변수에 대한 정보 명령문 및 함수PQn필드, PQfname, PQftype등은 다음에 대한 정보를 제공합니다. 명령문의 결과 열(있는 경우).

PQdescribePortal

다음에 관한 정보를 얻기 위해 요청을 제출합니다. 포털을 지정하고 완료될 때까지 기다립니다.

PG토토 커뮤니티ult *PQdescribePortal(PGconn *conn, const char *portalName);

PQdescribePortal허용합니다 이전에 관한 정보를 얻기 위한 신청서 포털을 만들었습니다. (libpq포털에 대한 직접적인 액세스를 제공하지 않지만 이 기능을 사용하여 속성을 검사할 수 있습니다. 커서는로 생성되었습니다.선언하다 커서SQL 명령.)PQdescribePortal다음에서만 지원됩니다. 프로토콜 3.0 이상 연결; 다음과 같은 경우에는 실패할 것입니다. 프로토콜 2.0을 사용합니다.

포털이름될 수 있습니다""또는NULL이름 없는 포털을 참조하려면, 그렇지 않으면 기존 포털의 이름이어야 합니다. ~에 성공, 아PG토토 커뮤니티ult와 함께 상태PG토토 커뮤니티_COMMAND_OK이다 돌아왔다. 기능PQn필드, PQfname, PQftype등은에 적용될 수 있습니다.PG토토 커뮤니티ult얻다 결과 열(있는 경우)에 대한 정보 문.

PG토토 커뮤니티ult구조 서버가 반환한 결과를 캡슐화합니다.libpq응용프로그램 프로그래머는 다음과 같아야 합니다. 유지관리에 주의하세요PG토토 커뮤니티ult추상화. 아래 접근자 기능을 사용하여 내용PG토토 커뮤니티ult. 피하다 의 필드를 직접 참조합니다.PG토토 커뮤니티ult구조는 주제이기 때문에 앞으로는 바뀔 거예요.

PQ토토 커뮤니티ultStatus

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

ExecStatusType PQ토토 커뮤니티ultStatus(const PG토토 커뮤니티ult *res);

PQ토토 커뮤니티ultStatus할 수 있다 다음 값 중 하나를 반환합니다.

PG토토 커뮤니티_EMPTY_QUERY

서버로 전송된 문자열이 비어있습니다.

PG토토 커뮤니티_COMMAND_OK

아니요를 반환하는 명령이 성공적으로 완료되었습니다. 데이터.

PG토토 커뮤니티_TUPLES_OK

명령이 성공적으로 완료되었습니다. 데이터(예:선택또는표시).

PG토토 커뮤니티_COPY_OUT

복사(서버에서) 데이터 전송 시작했습니다.

PG토토 커뮤니티_COPY_IN

복사(서버로) 데이터 전송이 시작되었습니다.

PG토토 커뮤니티_BAD_토토 커뮤니티PONSE

서버의 응답을 이해할 수 없습니다.

PG토토 커뮤니티_NONFATAL_ERROR

치명적이지 않은 오류(통지 또는 경고) 발생했습니다.

PG토토 커뮤니티_FATAL_ERROR

치명적인 오류가 발생했습니다.

PG토토 커뮤니티_COPY_BOTH

복사 입출력(서버 간) 데이터 전송 시작되었습니다. 현재 스트리밍에만 사용됩니다. 복제.

결과 상태가 다음과 같은 경우PG토토 커뮤니티_TUPLES_OK, 그 다음에는 함수 아래 설명된 내용을 사용하여 반환된 행을 검색할 수 있습니다. 쿼리로. 참고하세요선택0개의 행을 검색하는 명령이 계속 표시됩니다.PG토토 커뮤니티_TUPLES_OK. PG토토 커뮤니티_COMMAND_OK은 다음을 수행할 수 있는 명령용입니다. 행을 반환하지 않음(삽입, 업데이트등). 의 응답PG토토 커뮤니티_EMPTY_QUERY표시될 수 있음 클라이언트 소프트웨어의 버그입니다.

상태의 결과PG토토 커뮤니티_NONFATAL_ERROR절대 반환되지 않습니다. 직접적으로PQexec또는 기타 쿼리 실행 기능; 이런 종류의 결과는 대신 알림 프로세서에 전달됩니다(참조섹션 31.11).

PQ토토 커뮤니티Status

다음에서 반환된 열거 유형을 변환합니다.PQ토토 커뮤니티ultStatus문자열 상수로 상태 코드를 설명합니다. 발신자는 통화를 해제해서는 안 됩니다. 결과입니다.

char *PQ토토 커뮤니티Status(ExecStatusType 상태);
PQ토토 커뮤니티ultErrorMessage

명령과 관련된 오류 메시지를 반환합니다. 또는 오류가 없으면 빈 문자열입니다.

char *PQ토토 커뮤니티ultErrorMessage(const PG토토 커뮤니티ult *res);

오류가 있는 경우 반환된 문자열은 후행 개행 문자를 포함합니다. 발신자는 통화를 해제해서는 안 됩니다. 결과는 직접적으로. 연결된 경우 해제됩니다.PG토토 커뮤니티ult핸들이 다음으로 전달됨PQclear.

a 즉시 따르기PQexec또는PQget토토 커뮤니티ult전화,PQerrorMessage(연결 시)는 와 동일한 문자열을 반환합니다.PQ토토 커뮤니티ultErrorMessage(결과에 대해). 그러나 aPG토토 커뮤니티ult할 것이다 파괴될 때까지 오류 메시지를 유지하는 반면, 연결 오류 메시지는 이후에 변경됩니다. 작업이 완료되었습니다. 사용PQ토토 커뮤니티ultErrorMessage당신이 원할 때 특정과 관련된 상태를 알 수 있습니다.PG토토 커뮤니티ult; 사용PQerrorMessage당신이 알고 싶을 때 최근 작업의 상태 연결.

PQ토토 커뮤니티ultErrorField

오류 보고서의 개별 필드를 반환합니다.

char *PQ토토 커뮤니티ultErrorField(const PG토토 커뮤니티ult *res, int fieldcode);

필드코드오류 필드입니다. 식별자; 아래에 나열된 기호를 참조하세요.NULL다음의 경우 반환됩니다.PG토토 커뮤니티ult오류나 경고가 아닙니다. 결과이거나 지정된 필드를 포함하지 않습니다. 필드 값에는 일반적으로 후행 개행 문자가 포함되지 않습니다. 그만큼 호출자는 결과를 직접 해제해서는 안 됩니다. 그것은 될 것이다 연결된 경우 해제됨PG토토 커뮤니티ult핸들이 다음으로 전달됨PQclear.

다음 필드 코드를 사용할 수 있습니다:

PG_DIAG_SEVERITY

심각도; 필드 내용은 다음과 같습니다.오류, 치명적또는패닉(오류 메시지에서) 또는경고, 공지, 디버그, 정보또는로그(알림 메시지에서) 또는 이들 중 하나의 현지화된 번역. 언제나 현재의.

PG_DIAG_SQLSTATE

오류에 대한 SQLSTATE 코드. SQLSTATE 코드는 발생한 오류 유형을 식별합니다. 발생; 프런트엔드 애플리케이션에서 사용할 수 있습니다. 특정 작업(예: 오류 처리) 특정 데이터베이스에 대한 응답으로 오류. 가능한 SQLSTATE 코드 목록을 보려면 보다와이즈 토토 : 문서 : 9.1 : 와이즈. 이 필드는 지역화할 수 없으며 항상 현재의.

PG_DIAG_MESSAGE_PRIMARY

사람이 읽을 수 있는 주요 오류 메시지 (일반적으로 한 줄). 항상 존재합니다.

PG_DIAG_MESSAGE_DETAIL

세부사항: 선택적 보조 오류 메시지 문제에 대해 더 자세히 설명합니다. 달릴 수도 있다 여러 줄로.

PG_DIAG_MESSAGE_HINT

힌트: 무엇을 해야할지 선택적 제안 문제. 이는 세부 사항과 다를 수 있습니다. 조언을 제공한다는 점에서(잠재적으로 부적절) 확실한 사실보다는 다음으로 달려갈 수도 있다 여러 줄.

PG_DIAG_STATEMENT_POSITION

다음을 나타내는 10진수 정수가 포함된 문자열 오류 커서 위치를 인덱스로 원래 명령문 문자열. 첫 번째 캐릭터는 인덱스 1, 위치는 문자로 측정됩니다. 바이트가 아닙니다.

PG_DIAG_INTERNAL_POSITION

이것은 다음과 동일하게 정의됩니다.PG_DIAG_STATEMENT_POSITION필드이지만 커서 위치가 다음을 참조할 때 사용됩니다. 명령이 아닌 내부적으로 생성된 명령 클라이언트가 제출했습니다. 그만큼PG_DIAG_INTERNAL_QUERY필드는 이 필드가 나타나면 항상 나타납니다.

PG_DIAG_INTERNAL_QUERY

실패한 내부 생성 텍스트 명령. 예를 들어 SQL 쿼리일 수 있습니다. PL/pgSQL 함수에 의해 발행됩니다.

PG_DIAG_CONTEXT

오류가 발생한 컨텍스트 표시 발생했습니다. 현재 여기에는 호출 스택이 포함됩니다. 활성 절차적 언어 함수의 추적 내부적으로 생성된 쿼리. 흔적은 하나다 한 줄에 항목이 가장 최근 항목부터 표시됩니다.

PG_DIAG_SOURCE_FILE

소스 코드 위치의 파일 이름 오류가 보고되었습니다.

PG_DIAG_SOURCE_LINE

소스 코드 위치의 줄 번호 오류가 보고된 위치입니다.

PG_DIAG_SOURCE_FUNCTION

소스 코드 함수 보고의 이름 오류입니다.

클라이언트는 표시된 형식을 담당합니다. 필요에 맞는 정보; 특히 그래야 한다 필요에 따라 긴 줄을 끊습니다. 줄 바꿈 문자가 나타납니다. 오류 메시지 필드에서는 다음과 같이 처리되어야 합니다. 줄바꿈이 아닌 단락 나누기입니다.

다음에 의해 내부적으로 생성된 오류libpq심각도와 기본이 있습니다. 메시지가 있지만 일반적으로 다른 필드는 없습니다. 반환된 오류 3.0 이전 프로토콜 서버에서는 심각도와 기본 메시지, 때로는 세부 메시지이지만 다른 분야.

오류 필드는 다음에서만 사용할 수 있습니다.PG토토 커뮤니티ult객체, 아님PGconn객체; 없어요PQerrorField함수.

PQclear

a와 관련된 저장 공간을 비웁니다.PG토토 커뮤니티ult. 모든 명령 결과는 다음을 통해 해제됩니다.PQclear언제 더 이상 필요하지 않습니다.

void PQclear(PG토토 커뮤니티ult *res);

당신은 다음을 유지할 수 있습니다.PG토토 커뮤니티ult당신이 필요로 하는 한 주변에 물건을 두십시오; 그것은 가지 않는다 새로운 명령을 내릴 때나 닫을 때에도 연결. 이를 제거하려면 전화해야 합니다.PQclear. 이를 수행하지 않음 애플리케이션에서 메모리 누수가 발생합니다.

31.3.2. 쿼리 결과를 가져오는 중 정보

이 함수는 다음에서 정보를 추출하는 데 사용됩니다.PG토토 커뮤니티ult다음을 나타내는 객체 성공적인 쿼리 결과(즉, 상태가 있는 결과)PG토토 커뮤니티_TUPLES_OK). 그들은 또한 성공적인 설명에서 정보를 추출하는 데 사용됩니다. 작업: 설명 결과에 모두 동일한 열이 있습니다. 쿼리의 실제 실행이 제공하는 정보 하지만 행이 없습니다. 다른 상태 값을 가진 개체의 경우 이러한 함수는 결과에 행이 0개 있는 것처럼 작동하고 열이 없습니다.

PQntuples

질의의 행(튜플) 수를 반환합니다. 결과. 정수 결과를 반환하기 때문에 결과 집합이 32비트에서 반환 값을 오버플로할 수 있음 운영 체제.

int PQntuples(const PG토토 커뮤니티ult *res);
PQn필드

각 행의 열(필드) 수를 반환합니다. 쿼리 결과입니다.

int PQnfields(const PG토토 커뮤니티ult *res);
PQfname

주어진 항목과 연관된 열 이름을 반환합니다. 열 번호. 열 번호는 0부터 시작합니다. 호출자 결과를 직접적으로 해제해서는 안 됩니다. 해방될 것이다 연결된 경우PG토토 커뮤니티ult핸들이 다음으로 전달됨PQclear.

char *PQfname(const PG토토 커뮤니티ult *res,
              int 열_번호);

NULL열이 다음인 경우 반환됩니다. 번호가 범위를 벗어났습니다.

PQf번호

주어진 항목과 관련된 열 번호를 반환합니다. 열 이름입니다.

int PQfnumber(const PG토토 커뮤니티ult *res,
              const char *column_name);

주어진 이름이 일치하지 않는 경우 -1이 반환됩니다. 열.

주어진 이름은 SQL의 식별자처럼 처리됩니다. 즉, 큰따옴표가 없으면 대문자로 표시됩니다. 예를 들어, SQL에서 생성된 쿼리 결과가 주어지면 명령:

1을 FOO로, 2를 "BAR"로 선택;

우리는 결과를 얻을 것입니다:

PQfname(res, 0)fooPQfname(res, 1)PQfnumber(토토 커뮤니티, "FOO")0PQfnumber(res, "foo")0PQfnumber(토토 커뮤니티, "BAR")-1PQfnumber(토토 커뮤니티, "\"BAR\"")1
PQftable

주어진 테이블의 OID를 반환합니다. 열을 가져왔습니다. 열 번호는 0부터 시작합니다.

Oid PQftable(const PG토토 커뮤니티ult *res,
             int 열_번호);

InvalidOid다음과 같은 경우 반환됩니다. 열 번호가 범위를 벗어났거나 지정된 열이 테이블 열에 대한 간단한 참조가 아니거나 3.0 이전 프로토콜을 사용합니다. 시스템 테이블을 쿼리할 수 있습니다.pg_class정확하게 결정하다 어떤 테이블이 참조되는지.

유형오이드그리고 상수InvalidOid다음 경우에 정의됩니다. 당신은 다음을 포함합니다.libpq헤더 파일. 둘 다 정수 유형입니다.

PQftablecol

테이블 내의) 열 번호를 반환합니다. 지정된 쿼리 결과 열을 구성하는 열입니다. 쿼리 결과 열 번호는 0부터 시작하지만 테이블 열은 0부터 시작합니다. 0이 아닌 숫자가 있습니다.

int PQftablecol(const PG토토 커뮤니티ult *res,
                int 열_번호);

열 번호가 범위를 벗어나면 0이 반환됩니다. 또는 지정된 열이 테이블 열 또는 3.0 이전 프로토콜을 사용하는 경우.

PQfformat

형식을 나타내는 형식 코드를 반환합니다. 주어진 열. 열 번호는 0부터 시작합니다.

int PQfformat(const PG토토 커뮤니티ult *res,
              int 열_번호);

형식 코드 0은 텍스트 데이터를 나타냅니다. 형식 코드 1은 이진수를 나타냅니다. 대표. (다른 코드는 향후를 위해 예약되어 있습니다. 정의.)

PQftype

주어진 열과 연관된 데이터 유형을 반환합니다. 숫자. 반환된 정수는 내부 OID 번호입니다. 유형의. 열 번호는 0부터 시작합니다.

Oid PQftype(const PG토토 커뮤니티ult *res,
            int 열_번호);

시스템 테이블을 쿼리할 수 있습니다.pg_type이름과 속성을 얻기 위해 다양한 데이터 유형 중. 그만큼OID51289_51354src/include/catalog/pg_type.h에 소스 트리.

PQfmod

연관된 열의 유형 수정자를 반환합니다. 주어진 열 번호로. 열 번호는 다음에서 시작합니다. 0.

int PQfmod(const PG토토 커뮤니티ult *res,
           int 열_번호);

수정자 값의 해석은 다음과 같습니다. 유형별; 일반적으로 정밀도나 크기를 나타냅니다. 제한. 값 -1은 다음을 나타내는 데 사용됩니다."사용 가능한 정보가 없습니다". 대부분의 데이터 유형은 수정자를 사용하지 않습니다. 이 경우 값은 다음과 같습니다. 항상 -1.

PQfsize

연관된 열의 크기를 바이트 단위로 반환합니다. 주어진 열 번호로. 열 번호는 다음에서 시작합니다. 0.

int PQfsize(const PG토토 커뮤니티ult *res,
            int 열_번호);

PQfsize반환 데이터베이스 행에서 이 열에 할당된 공간 즉, 서버 내부의 크기 데이터 유형의 표현. (따라서 그렇지 않다. 클라이언트에게 정말 매우 유용합니다.) 음수 값 데이터 유형이 가변 길이임을 나타냅니다.

PQbinaryTuples

다음인 경우 1을 반환합니다.PG토토 커뮤니티ult바이너리 데이터를 포함하고 텍스트 데이터를 포함하는 경우 0입니다.

int PQbinaryTuples(const PG토토 커뮤니티ult *res);

이 함수는 더 이상 사용되지 않습니다(다음에서의 사용 제외). 와 연결됨복사) 왜냐하면 싱글이면 가능해요PG토토 커뮤니티ult일부 텍스트 데이터를 포함하기 위해 다른 열 및 이진 데이터.PQfformat선호됩니다.PQbinaryTuples모두인 경우에만 1을 반환합니다. 결과 열은 바이너리입니다(형식 1).

PQgetvalue

a의 한 행에 대한 단일 필드 값을 반환합니다.PG토토 커뮤니티ult. 행과 열 숫자는 0부터 시작합니다. 호출자는 결과를 해제해서는 안 됩니다. 곧장. 연결된 경우 해제됩니다.PG토토 커뮤니티ult핸들이 다음으로 전달됨PQclear.

char *PQgetvalue(const PG토토 커뮤니티ult *res,
                 정수 행_번호,
                 int 열_번호);

텍스트 형식의 데이터에 대해 반환된 값은PQgetvalue은 null로 끝나는 문자열 표현 필드 값. 이진 형식 데이터의 경우 값은 다음과 같습니다. 데이터 유형에 의해 결정되는 이진 표현typsend그리고typreceive함수. (값은 실제로 이 경우에도 0바이트가 따라오지만 이는 일반적으로 유용하지 않습니다. 왜냐하면 그 가치는 아마도 포함된 null을 포함합니다.)

필드 값이 다음인 경우 빈 문자열이 반환됩니다. 널. 보다PQgetisnull에 null 값과 빈 문자열 값을 구별합니다.

다음에 의해 반환된 포인터PQgetvalue저장소를 가리킵니다. 의 일부PG토토 커뮤니티ult구조. 그것이 가리키는 데이터를 수정해서는 안 됩니다. 데이터를 다른 저장소에 명시적으로 복사해야 합니다. 수명이 다한 후에 사용하려는 경우PG토토 커뮤니티ult구조 자체.

PQgetisnull

필드에서 null 값을 테스트합니다. 행 및 열 번호 0부터 시작하세요.

int PQgetisnull(const PG토토 커뮤니티ult *res,
                정수 행_번호,
                int 열_번호);

이 함수는 필드가 null인 경우 1을 반환하고 다음인 경우 0을 반환합니다. null이 아닌 값이 포함되어 있습니다. (참고하세요PQgetvalue빈 문자열을 반환합니다. null 필드의 경우 null 포인터가 아닙니다.)

PQgetlength

필드 값의 실제 길이를 바이트 단위로 반환합니다. 행과 열 번호는 0부터 시작합니다.

int PQgetlength(const PG토토 커뮤니티ult *res,
                정수 행_번호,
                int 열_번호);

이것은 특정 데이터에 대한 실제 데이터 길이입니다 값, 즉 가리키는 객체의 크기PQgetvalue. 텍스트 데이터의 경우 형식은 다음과 같습니다.strlen(). 바이너리 형식의 경우 이는 다음과 같습니다. 필수 정보. 주의해야 할 점은 다음과 같습니다.아님의존하다PQfsize실제 데이터를 얻기 위해 길이.

PQnparams

준비된 매개변수의 수를 반환합니다. 성명.

int PQnparams(const PG토토 커뮤니티ult *res);

이 기능은 다음을 검사할 때만 유용합니다. 결과PQdescribe준비됨. 다른 유형의 경우 쿼리하면 0이 반환됩니다.

PQ매개변수 유형

표시된 문의 데이터 유형을 반환합니다. 매개변수. 매개변수 번호는 0부터 시작합니다.

Oid PQparamtype(const PG토토 커뮤니티ult *res, int param_number);

이 기능은 다음을 검사할 때만 유용합니다. 결과PQdescribe준비됨. 다른 유형의 경우 쿼리하면 0이 반환됩니다.

PQ프린트

모든 행과 선택적으로 열을 인쇄합니다. 지정된 출력 스트림에 이름을 붙입니다.

void PQprint(FILE *fout, /* 출력 스트림 */
             const PG토토 커뮤니티ult *res,
             const PQprintOpt *po);
typedef 구조체

    pqbool 헤더;      /* 출력 필드 제목과 행 개수를 인쇄합니다 */
    pqbool 정렬;       /* 필드 채우기 채우기 */
    pqbool 표준;    /* 오래된 뇌사 형식 */
    pqbool html3;       /* HTML 테이블 출력 */
    pqbool 확장;    /* 테이블 확장 */
    pqbool 호출기;       /* 필요한 경우 출력을 위해 호출기를 사용합니다 */
    char *fieldSep;   /* 필드 구분자 */
    char *tableOpt;   /* HTML 테이블 요소의 속성 */
    문자 *캡션;    /* HTML 테이블 캡션 */
    char **필드명; /* null로 끝나는 대체 필드 이름 배열 */
 PQprintOpt;

이 기능은 이전에 다음에서 사용되었습니다.psql쿼리 결과를 인쇄하지만 이것은 더 이상 사실이 아닙니다. 이는 모든 것을 가정한다는 점에 유의하십시오. 데이터는 텍스트 형식입니다.

31.3.3. 다른 결과 검색 중 정보

이 함수는 다음에서 다른 정보를 추출하는 데 사용됩니다.PG토토 커뮤니티ult객체.

PQcmd상태

SQL 명령에서 명령 상태 태그를 반환합니다. 생성된 것은PG토토 커뮤니티ult.

char *PQcmdStatus(PG토토 커뮤니티ult *res);

일반적으로 이는 단지 명령의 이름이지만 행 수와 같은 추가 데이터가 포함될 수 있습니다. 처리됨. 호출자는 결과를 해제해서는 안 됩니다. 곧장. 연결된 경우 해제됩니다.PG토토 커뮤니티ult핸들이 다음으로 전달됨PQclear.

PQcmdTuples

SQL의 영향을 받은 행 수를 반환합니다. 명령.

char *PQcmdTuples(PG토토 커뮤니티ult *res);

이 함수는 숫자를 포함하는 문자열을 반환합니다 의 영향을 받은 행 수SQL다음을 생성한 문PG토토 커뮤니티ult. 이 기능은 a 실행 후에만 사용됩니다.선택, 테이블 생성 처럼, 삽입, 업데이트, 삭제, 이동, 가져오기또는복사문장 또는실행의 를 포함하는 준비된 쿼리삽입, 업데이트, 또는삭제문장. 만약 를 생성한 명령PG토토 커뮤니티ult다른 것도 있었어,PQcmdTuples반환 빈 문자열. 호출자는 반환 값을 해제해서는 안 됩니다. 곧장. 연결된 경우 해제됩니다.PG토토 커뮤니티ult핸들이 다음으로 전달됨PQclear.

PQoidValue

다음인 경우 삽입된 행의 OID를 반환합니다.SQL명령은삽입정확히 하나를 삽입했습니다. OID가 있는 테이블에 행을 추가하거나,실행다음을 포함하는 준비된 쿼리의 적합한삽입문장. 그렇지 않으면 이 함수는 다음을 반환합니다.InvalidOid. 이 함수는 또한 반환됩니다.InvalidOid테이블이 영향을 받은 경우 에 의해삽입문은 그렇지 않습니다 OID를 포함합니다.

Oid PQoidValue(const PG토토 커뮤니티ult *res);
PQoidStatus

이 기능은 다음을 위해 더 이상 사용되지 않습니다.PQoidValue그리고 스레드로부터 안전하지 않습니다. 그것 삽입된 행의 OID가 포함된 문자열을 반환합니다.PQoid값OID를 반환합니다. 값.

char *PQoidStatus(const PG토토 커뮤니티ult *res);

31.3.4. 문자열 이스케이프 SQL 명령에 포함

PQescapeLiteral
char *PQescapeLiteral(PGconn *conn, const char *str, size_t length);

PQescapeLiteral탈출 SQL 명령 내에서 사용할 문자열입니다. 이것은 유용하다 SQL에서 데이터 값을 리터럴 상수로 삽입할 때 명령. 특정 문자(예: 따옴표 및 백슬래시)를 방지하려면 이스케이프 처리해야 합니다. SQL 파서에 의해 특별히 해석됩니다.PQescapeLiteral이것을 수행합니다 작업.

PQescapeLiteral반환 이스케이프된 버전의str다음으로 할당된 메모리의 매개변수malloc(). 이 메모리는 해제되어야 합니다. 사용 중PQfreemem()때 결과는 더 이상 필요하지 않습니다. 종료 0바이트는 다음과 같습니다. 필수는 아니며 계산에 포함되어서는 안 됩니다.길이. (종료 0바이트가 이전에 발견됨길이바이트는 처리됨,PQescapeLiteral0에서 멈춥니다. 따라서 동작은 다소 다음과 같습니다strncpy.) 반환 문자열 모든 특수 문자를 교체하여 사용할 수 있도록 했습니다. 에 의해 올바르게 처리되었습니다.PostgreSQL문자열 리터럴 파서. 에이 0바이트 종료도 추가됩니다. 작은따옴표 둘러싸야 함PostgreSQL문자열 리터럴은 다음과 같습니다. 결과 문자열에 포함됩니다.

오류 발생 시,PQescapeLiteral반환NULL적절한 메시지가 다음 위치에 저장됩니다. 그만큼객체.

팁:다음을 수행하는 것이 특히 중요합니다. 다음과 같은 문자열을 처리할 때 적절한 이스케이프 처리 신뢰할 수 없는 출처로부터 수신되었습니다. 그렇지 않으면 보안 위험이 있습니다: 귀하는 다음에 취약합니다."SQL 주입"공격 원치 않는 SQL 명령이 데이터 베이스.

다음을 수행할 필요도 없고 올바르지도 않음을 참고하십시오. 데이터 값이 별도의 값으로 전달될 때 이스케이프 처리 매개변수 inPQexecParams또는 그 형제 루틴.

PQescapeIdentifier
char *PQescapeIdentifier(PGconn *conn, const char *str, size_t length);

PQescapeIdentifierSQL 식별자로 사용하기 위해 문자열을 이스케이프합니다. 테이블, 열 또는 함수 이름. 이는 다음과 같은 경우에 유용합니다. 사용자 제공 식별자에 특수 문자가 포함될 수 있습니다. 그렇지 않으면 다음의 일부로 해석되지 않습니다. SQL 파서에 의한 식별자 또는 식별자 대소문자를 구분해야 하는 대문자가 포함될 수 있습니다. 보존됩니다.

PQescapeIdentifier다음 버전을 반환합니다.str매개변수가 메모리에서 SQL 식별자로 이스케이프되었습니다. 으로 할당됨malloc(). 이 메모리는 다음을 사용하여 해제되어야 합니다.PQfreemem()결과가 no인 경우 더 이상 필요합니다. 종료 0바이트는 필요하지 않습니다. 포함되어서는 안 됩니다.길이. (종료 0바이트가 이전에 발견됨길이바이트는 처리됨,PQescapeIdentifier0에서 멈춥니다. 따라서 동작은 다소 다음과 같습니다strncpy.) 반환 문자열에는 특수 문자가 올바르게 대체되도록 대체되었습니다. SQL 식별자로 처리됩니다. 종료 0바이트 도 추가됩니다. 반환 문자열도 둘러싸입니다. 큰따옴표로 묶습니다.

오류 발생 시,PQescapeIdentifier반환NULL적절한 메시지가 다음 위치에 저장됩니다. 그만큼객체.

팁:문자열 리터럴과 마찬가지로 SQL 주입 공격, SQL 식별자는 다음과 같아야 합니다. 신뢰할 수 없는 사람으로부터 수신되었을 때 탈출되었습니다. 원천.

PQescapeStringConn
size_t PQescapeStringConn(PGconn *conn,
                          char *to, const char *from, size_t 길이,
                          int *오류);

PQescapeStringConn문자열 리터럴을 이스케이프합니다.PQescapeLiteral. 같지 않은PQescapeLiteral, 발신자는 적절한 크기의 버퍼를 제공하는 일을 담당합니다. 뿐만 아니라,PQescapeStringConn생성하지 않습니다 둘러싸야 하는 작은따옴표포스트그레SQL문자열 리터럴; 그들 결과가 다음과 같은 SQL 명령에 제공되어야 합니다. 에 삽입되었습니다. 매개변수에서다음의 첫 번째 문자를 가리킵니다. 이스케이프할 문자열 및길이매개변수는 이 문자열의 바이트입니다. 종료 0바이트는 그렇지 않습니다. 필수이며 여기에 포함되어서는 안 됩니다.길이. (종료 0바이트가 이전에 발견됨길이바이트는 처리됨,PQescapeStringConn0에서 멈춥니다. 따라서 동작은 다소 다음과 같습니다strncpy.) 적어도 하나 이상의 버퍼를 보유할 수 있는 버퍼를 가리켜야 합니다. 값의 두 배보다 많은 바이트입니다.길이, 그렇지 않으면 동작은 다음과 같습니다. 한정되지 않은. 다음과 같은 경우에도 동작이 정의되지 않습니다.그리고에서문자열이 겹칩니다.

만약에오류매개변수는 아니다NULL그러면*오류성공 시 0으로 설정되며 0이 아님 오류가 발생했습니다. 현재 가능한 유일한 오류 조건 소스 문자열에 잘못된 멀티바이트 인코딩이 포함되어 있습니다. 오류 발생 시 출력 문자열이 계속 생성되지만 서버가 잘못된 형식으로 거부할 것으로 예상됩니다. 오류가 발생하면 적절한 메시지가에 저장됩니다.객체, 여부오류이다NULL.

PQescapeStringConn기록된 바이트 수를 반환합니다., 종료 0을 포함하지 않음 바이트.

PQescapeString

PQescapeString은 이전 버전, 더 이상 사용되지 않는 버전PQescapeStringConn.

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

다음과 유일한 차이점은PQescapeStringConn그렇군요PQescapeString취하지 않습니다PGconn또는오류매개변수. 이로 인해 연결에 따라 동작을 조정할 수 없습니다. 속성(예: 문자 인코딩) 및 따라서그것은 잘못된 결과. 또한 오류를 보고할 방법도 없습니다. 정황.

PQescapeString될 수 있습니다 하나만 작동하는 클라이언트 프로그램에서 안전하게 사용됩니다.PostgreSQL연결 위치 시간(이 경우 필요한 것이 무엇인지 알 수 있습니다. 알다"뒤에서"). ~ 안에 다른 상황에서는 보안 위험이 있으므로 를 위해 피함PQescapeStringConn.

PQescapeByteaConn

다음을 사용하여 SQL 명령 내에서 사용하기 위해 바이너리 데이터를 이스케이프합니다. 유형바이테아. 마찬가지로PQescapeStringConn이건 SQL에 데이터를 직접 삽입할 때만 사용됩니다. 명령 문자열.

부호 없는 문자 *PQescapeByteaConn(PGconn *conn,
                                 const unsigned char *from,
                                 size_t from_length,
                                 size_t *to_length);

특정 바이트 값은 일부로 사용될 때 이스케이프되어야 합니다 의바이테아문자 그대로SQL진술.PQescapeByteaConn탈출 16진수 인코딩 또는 백슬래시 이스케이프를 사용하는 바이트입니다. 보다섹션 8.4용 자세한 정보.

에서매개변수 포인트 이스케이프할 문자열의 첫 번째 바이트까지, 그리고from_length매개변수 이 이진 문자열의 바이트 수를 제공합니다. (에이 0바이트 종료는 필요하지도 않고 계산되지도 않습니다.) 그만큼to_length매개변수 포인트 결과 이스케이프 문자열을 보유할 변수 길이. 이 결과 문자열 길이에는 다음이 포함됩니다. 결과의 0바이트를 종료합니다.

PQescapeByteaConn이스케이프된 버전을 반환합니다.에서메모리의 매개변수 바이너리 문자열 로 할당됨malloc(). 이 메모리는 다음을 사용하여 해제되어야 합니다.PQfreemem()결과가 no인 경우 더 이상 필요합니다. 반환 문자열에는 모든 특수 문자가 있습니다. 문자가 제대로 표시될 수 있도록 교체됨 에 의해 처리됨포스트그레SQL문자열 리터럴 파서, 그리고바이테아입력 함수. 에이 0바이트 종료도 추가됩니다. 작은따옴표 둘러싸야 함포스트그레SQL문자열 리터럴은 그렇지 않습니다. 결과 문자열의 일부입니다.

오류 발생 시 널 포인터가 반환되며 적절한 오류 메시지는에 저장됩니다.객체. 현재 유일한 가능한 오류는 결과를 저장할 메모리가 부족하다는 것입니다. 끈.

PQescapeBytea

PQescapeBytea은 이전 버전, 더 이상 사용되지 않는 버전PQescapeByteaConn.

unsigned char *PQescapeBytea(const unsigned char *from,
                             size_t from_length,
                             size_t *to_length);

유일한 차이점은PQescapeByteaConn그렇군요PQescapeBytea다음을 취하지 않습니다PGconn매개변수. 때문에 이것,PQescapeBytea할 수 있다 단일을 사용하는 클라이언트 프로그램에서만 안전하게 사용할 수 있습니다.포스트그레SQL연결 위치 시간(이 경우 필요한 것이 무엇인지 알 수 있습니다. 알다"뒤에서"). 그것잘못된 내용을 줄 수도 있습니다 결과다중을 사용하는 프로그램에서 사용되는 경우 데이터베이스 연결(사용PQescapeByteaConn이러한 경우).

PQunescapeBytea

바이너리 데이터의 문자열 표현을 다음으로 변환합니다. 이진 데이터 — 반대PQescapeBytea. 이는 다음과 같은 경우에 필요합니다. 검색 중바이테아텍스트의 데이터 형식이지만 바이너리 형식으로 검색할 때는 그렇지 않습니다.

unsigned char *PQunescapeBytea(const unsigned char *from, size_t *to_length);

에서매개변수 포인트 다음과 같은 문자열로 반환될 수 있습니다.PQgetvaluea에 적용할 때바이테아열.PQunescapeBytea이 문자열을 변환합니다 표현을 이진 표현으로 변환합니다. 그것은 반환 로 할당된 버퍼에 대한 포인터malloc(), 또는NULL오류가 발생하면 크기를 입력합니다. 버퍼 입력to_length. 그만큼 결과는 다음을 사용하여 해제되어야 합니다.PQfreemem더 이상 존재하지 않을 때 필요합니다.

이 변환은 정확히 반대가 아닙니다.PQescapeBytea, 왜냐하면 문자열은 그렇지 않을 것으로 예상됩니다."탈출"다음에서 수신할 때PQgetvalue. 특히 이것은 의미합니다 문자열 인용을 고려할 필요가 없습니다. 그러니 a가 필요없어요PGconn매개변수.