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

27.3. 명령 실행 함수

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

27.3.1. 주요 기능

PQEXEC

서버에 명령을 제출하고 결과.

pg젠 토토ult *pqexec (pgconn *conn, const char *command);

반환 apg젠 토토ult포인터 또는 아마도 널 포인터 일 수 있습니다. 널이 아닌 포인터가 있습니다 일반적으로 메모리 외 조건을 제외하고 반환됩니다 또는 명령을 보낼 수없는 것과 같은 심각한 오류 서버에. 널 포인터가 반환되면 처럼 대우 받다pg젠 토토_fatal_error결과. 사용PQERRORMESSAGE더 많은 정보를 얻으려면 오류에 대해.

여러 SQL 명령을 포함 할 수 있습니다 (분리 명령 문자열에서 세미콜론). 여러 쿼리가 전송되었습니다 하나의PQEXEC통화가 처리됩니다 명시 적이없는 한 단일 거래에서시작/커밋명령 쿼리 문자열에 포함되어 다중으로 나뉩니다. 업무. 그러나 반환 된 점에 유의하십시오pg젠 토토ult구조는 결과 만 설명합니다 문자열에서 실행 된 마지막 명령의 하나 야 명령이 실패하고 문자열 처리가 중지됩니다. 반품pg젠 토토ult오류 조건.

pqexecparams

서버에 명령을 제출하고 결과적으로 매개 변수를 별도로 전달할 수 있습니다 SQL 명령 텍스트에서.

pg젠 토토ult *pqexecparams (pgconn *conn,
                       const char *명령,
                       int nparams,
                       const oid *paramtypes,
                       const char * const * paramvalues,
                       const int *paramlengths,
                       const int *faramformats,
                       int 젠 토토ultformat);

pqexecparamsPQEXEC그러나 제공합니다 추가 기능 : 매개 변수 값이 될 수 있습니다 명령 문자열에서 별도로 지정됩니다 쿼리 결과는 텍스트 또는 이진으로 요청할 수 있습니다. 체재.pqexecparamsIS 프로토콜 3.0 이상 연결에서만 지원됩니다. 그것 프로토콜 2.0을 사용할 때 실패합니다.

매개 변수가 사용되면 명령 문자열 as$ 1, $ 2nparams는 매개 변수 수입니다 공급; 배열의 길이입니다Paramtypes [], Paramvalues ​​[], Paramlengths []FARAMFORMATS []. (배열 포인터는 할 수 있습니다 BENULL언제NPARAMSis ZERO.)Paramtypes []OID에 의해 데이터를 지정합니다 매개 변수 기호에 할당 할 유형. 만약에ParamtypesisNULL또는 배열은 0이고 서버는 데이터 유형을 매개 변수 기호와 같은 방식으로 무형 문자 그대로 문자열.Paramvalues ​​[]실제를 지정합니다 매개 변수의 값. 이 배열의 널 포인터 해당 매개 변수가 null임을 의미합니다. 그렇지 않으면 포인터는 텍스트의 경우 제로 종료 된 텍스트 문자열을 가리 킵니다 형식) 또는 이진 데이터는 서버 (이진 형식).Paramlengths []실제 데이터를 지정합니다 이진 형식 매개 변수의 길이. 무시됩니다 널 매개 변수 및 텍스트 형식 매개 변수. 배열 이진 매개 변수가 없을 때 포인터가 무일하게 될 수 있습니다.FARAMFORMATS []지정 매개 변수가 텍스트인지 여부 (배열에 0을 넣음) 이진 (배열에 하나를 넣습니다). 배열 포인터 인 경우 NULL 그러면 모든 매개 변수는 텍스트로 추정됩니다.젠 토토ultformat획득하기는 0입니다 텍스트 형식의 결과 또는 결과를 얻기위한 결과 이진 형식. (현재 조항이 없습니다 다른 형식의 다른 결과 열을 얻고 기본에서는 가능합니다 규약.)

의 주요 장점pqexecparamsOverPQEXEC그 매개 변수 값이 될 수 있습니다 명령 문자열에서 분리되어 필요를 피합니다. 지루하고 오류가 발생하기 쉬운 인용 및 탈출. 같지 않은PQEXEC, pqexecparams최대 하나의 SQL 명령을 허용합니다 주어진 문자열에서. (반 콜론이있을 수 있지만 그렇지 않습니다 하나 이상의 비어 있지 않은 명령.) 이것은 기본 프로토콜이지만 추가로 유용성이 있습니다 SQL 주입 공격에 대한 방어.

pqExecprepared

준비한 문을 실행하라는 요청을 보냅니다 매개 변수가 주어지고 결과를 기다립니다.

pg젠 토토ult *pqexecprepared (pgconn *conn,
                         const char *stmtname,
                         int nparams,
                         const char * const * paramvalues,
                         const int *paramlengths,
                         const int *faramformats,
                         int 젠 토토ultformat);

pqExecprepared같아pqexecparams실행되는 명령은 이름을 지정하여 지정됩니다 쿼리를 제공하는 대신 이전에 준비된 진술 끈. 이 기능을 사용하면 사용될 명령이 가능합니다 반복적으로 한 번만 구문 분석되고 계획되어야합니다 그들이 처형 될 때마다.pqExecprepared만 지원됩니다 프로토콜 3.0 이상 연결; 때는 실패합니다 프로토콜 사용 2.0.

매개 변수는 동일합니다pqexecparams, a의 이름을 제외하고 준비된 명령문은 쿼리 문자열 대신에 제공됩니다. 그리고Paramtypes []매개 변수 존재하지 않습니다 (준비된 이후에는 필요하지 않습니다. 명령문의 매개 변수 유형은시기에 결정되었습니다 생성).

현재, 사용하기위한 준비된 진술pqExecpreparedan을 실행하여 설정해야합니다 SQL준비명령입니다 일반적으로와 함께 보냈습니다.PQEXEClibpq's 쿼리 제외 기능을 사용할 수 있습니다). 하위 수준 진술 준비를위한 인터페이스는 향후에 제공 될 수 있습니다. 풀어 주다.

thepg젠 토토ult구조는 결과를 캡슐화합니다 서버에 의해.libpq애플리케이션 프로그래머는를 유지하기 위해주의해야합니다pg젠 토토ult추상화. 사용하십시오 아래의 액세서 기능은의 내용을 얻기 위해 기능합니다.pg젠 토토ult. 직접 참조하지 마십시오 의 필드pg젠 토토ult구조 그들은 미래에 변화를 겪을 수 있기 때문에.

pq젠 토토ultstatus

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

execstatustype pq젠 토토ultstatus (const pg젠 토토ult *res);

pq젠 토토ultstatuscan 다음 값 중 하나를 반환합니다.

pg젠 토토_empty_query

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

pg젠 토토_command_ok

반환하는 명령의 성공적인 완료 번호 데이터.

pg젠 토토_tuples_ok

명령 반환의 성공적인 완료 데이터 (예 :select또는show).

pg젠 토토_copy_out

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

pg젠 토토_copy_in

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

pg젠 토토_bad_젠 토토ponse

​​서버의 응답은 이해되지 않았습니다.

pg젠 토토_nonfatal_error

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

pg젠 토토_fatal_error

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

결과 상태가pg젠 토토_tuples_ok, 그런 다음 함수 아래 설명 된 행을 검색하는 데 사용될 수 있습니다. 쿼리에 의해. Aselect제로 행을 검색하여 발생하는 명령은 여전히 ​​표시됩니다pg젠 토토_tuples_ok. pg젠 토토_command_ok는 할 수있는 명령입니다 절대 줄을 반환하지 마십시오 (삽입, 업데이트등). 의 응답pg젠 토토_empty_querya를 표시 할 수 있습니다 클라이언트 소프트웨어의 버그.

상태의 결과pg젠 토토_nonfatal_error절대 반환되지 않습니다 직접PQEXEC또는 기타 쿼리 실행 기능; 이런 종류의 결과 대신 통지 프로세서로 전달되었습니다 (참조섹션 27.9).

pq젠 토토status

reture 열거 된 유형을 변환합니다pq젠 토토ultstatus문자열 상수로 상태 코드 설명.

char *pq젠 토토status (execstatustype status);
PQ젠 토토ULTERRORMESSAGE

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

char *pqresulterrormessage (const pg젠 토토ult *res);

오류가 있으면 반환 된 문자열이 있습니다 후행 뉴 라인 포함.

바로 다음PQEXEC또는pqget젠 토토ultCall,PQERRORMESSAGE(연결 중) 와 같은 문자열을 반환합니다.PQ젠 토토ULTERRORMESSAGE(결과). 그러나 Apg젠 토토ult의지 파괴 될 때까지 오류 메시지를 유지하는 동안 연결 오류 메시지는 후속시 변경됩니다 작업이 완료되었습니다. 사용PQ젠 토토ULTERRORMESSAGE원할 때 특정 상태를 알고 있습니다pg젠 토토ult; 사용PQERRORMESSAGE알고 싶을 때 최신 작업의 상태 연결.

pq젠 토토ulterrorfield

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

char *pqresultterrorfield (const pg젠 토토ult *res, int fieldcode);

FieldCode는 오류 필드입니다 식별자; 아래에 나열된 기호를 참조하십시오.NULL이되면 반환됩니다pg젠 토토ult는 오류 나 경고가 아닙니다 결과 또는 지정된 필드를 포함하지 않습니다. 필드 값은 일반적으로 후행 Newline을 포함하지 않습니다.

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

PG_DIAG_SEVERITY

심각도; 필드 내용은오류, 치명적또는panic(오류 메시지) 또는경고, 통지, 디버그, info또는log(통지 메시지) 또는 a 이들 중 하나의 현지화 된 번역. 언제나 현재의.

PG_DIAG_SQLSTATE

오류에 대한 sqlstate 코드 (참조부록 A). 아니다 현지화 가능. 항상 존재합니다.

PG_DIAG_MESSAGE_PRIMARY

기본 인간이 읽을 수있는 오류 메시지 (일반적으로 한 줄). 항상 존재합니다.

PG_DIAG_MESSAGE_DETAIL

세부 사항 : 선택적 보조 오류 메시지 문제에 대한 자세한 내용. 실행할 수 있습니다 여러 줄.

PG_DIAG_MESSAGE_HINT

힌트 : 선택적인 제안에 대해해야 할 일 문제. 이것은 세부 사항과 다르기위한 것입니다 그것은 조언을 제공한다는 점에서 (잠재적으로 어려운 사실보다는 부적절합니다. 실행할 수 있습니다 여러 줄.

pg_diag_statement_position

소수 정수를 포함하는 문자열 오류 커서 위치는 원본 문자열. 첫 번째 캐릭터는 있습니다 색인 1 및 위치는 문자로 측정됩니다 바이트가 아닙니다.

PG_DIAG_CONTEXT

오류가있는 컨텍스트의 표시 발생했습니다. 현재 여기에는 콜 스택이 포함됩니다 활성 PL 기능의 추적. 흔적은 하나입니다 줄 당 진입, 가장 최근 첫 번째.

pg_diag_source_file

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

pg_diag_source_line

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

pg_diag_source_function

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

클라이언트는 표시 형식을 담당합니다 필요를 충족시키기위한 정보; 특히 그것은해야합니다 필요에 따라 긴 줄을 끊으십시오. Newline 캐릭터가 나타납니다 오류에서 메시지 필드는 다음과 같이 처리해야합니다 단락 브레이크, 줄이 나지 않습니다.

내부적으로 생성 된 오류libpq심각도와 기본이 있습니다 메시지이지만 일반적으로 다른 필드는 없습니다. 오류가 반환되었습니다 Pre-3.0 Protocol 서버에는 심각도가 포함됩니다 기본 메시지, 때로는 세부 메시지이지만 아니요 다른 분야.

오류 필드는에서만 사용할 수 있습니다.pg젠 토토ult객체, 아님pgconn개체; 없음PQERRORFIELD기능.

PQCLEAR

a와 관련된 스토리지를 해제합니다.pg젠 토토ult. 모든 명령 결과가 있어야합니다 를 통해 해방PQCLEAR언제 더 이상 필요하지 않습니다.

void pqclear (pq젠 토토ult *젠 토토);

당신은 a를 유지할 수 있습니다.pg젠 토토ult필요한 한 오랫동안 객체; 가지 않습니다 새로운 명령을 발행 할 때 또는 닫는 경우에도 연결. 제거하려면 전화해야PQCLEAR. 이 작업을 수행하지 못합니다 응용 프로그램에서 메모리 누출이 발생합니다.

pqmakeemptypypg젠 토토ult

공허한 구성pg젠 토토ult주어진 객체 상태.

pg젠 토토ult * pqmakeemptypypg젠 토토ult (pgconn * conn, execstatustype 상태);

이것은libpq's 공허함을 할당하고 초기화하는 내부 기능pg젠 토토ult개체. 그것은 일부 응용 프로그램이 유용하다고 생각하기 때문에 내보 렸습니다 결과 객체 (특히 오류가있는 객체 상태) 자신. 만약에connis NULL 및상태오류, 지정된 현재 오류 메시지입니다 연결이에 복사됩니다.pg젠 토토ult. 참고PQCLEAR결국 호출해야합니다 객체,와 마찬가지로pg젠 토토ult반환libpq자체.

27.3.2. 쿼리 결과 검색 정보

이 기능은 a에서 정보를 추출하는 데 사용됩니다.pg젠 토토ulta 성공적인 쿼리 결과 (즉, 상태가있는 것pg젠 토토_tuples_ok). 객체와 함께 다른 상태 값은 결과에 0이 0이있는 것처럼 작동합니다. 행과 제로 열.

pqntuples

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

int pqntuples (const pg젠 토토ult *res);
pqnfields

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

int pqnfields (const pg젠 토토ult *res);
pqfname

주어진과 관련된 열 이름을 반환합니다 열 번호. 열 번호는 0에서 시작합니다.

char *pqfname (const pg젠 토토ult *res,
              int column_number);

null열이면 반환됩니다 숫자는 범위를 벗어났습니다.

pqfnumber

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

int pqfnumber (const pg젠 토토ult *res,
              const char *column_name);

33925_33996

주어진 이름은 SQL에서 식별자처럼 취급됩니다. 명령은 두 번 인용되지 않는 한 다운 케이스입니다. 예를 들어 SQL에서 생성 된 쿼리 결과가 주어지면 명령

FOO로 1, 2 "Bar"; 선택

결과가 있습니다 :

pqfname (res, 0)foopqfname (res, 1)barpqfnumber (res, "foo")0pqfnumber (res, "foo")0pqfnumber (res, "bar")-1pqfnumber (res, "\"bar \ "")1
pqftable

주어진 테이블의 Oid를 반환합니다. 칼럼이 가져 왔습니다. 열 번호는 0에서 시작합니다.

OID pqftable (const pg젠 토토ult *res,
             int column_number);

Invalidoid열 번호는 범위를 벗어나거나 지정된 열이있는 경우 테이블 열에 대한 간단한 참조가 아닙니다. Pre-3.0 프로토콜 사용. 시스템 테이블을 쿼리 할 수 ​​있습니다PG_CLASS정확히 결정합니다 어떤 테이블이 참조됩니다.

유형35533_35538및 상수Invalidoid당신은 포함libpq헤더 파일. 둘 다 정수 유형이 될 것입니다.

pqftablecol

열의 열 번호 (테이블 내)를 반환합니다 열이 지정된 쿼리 결과 열을 구성합니다. 결과 열 번호는 0에서 시작합니다.

int pqftablecol (const pg젠 토토ult *res,
                int column_number);

열 번호가 범위를 벗어난 경우 0이 반환됩니다. 또는 지정된 열이 간단한 참조가 아닌 경우 테이블 열, 또는 Pre-3.0 프로토콜을 사용할 때.

pqfformat

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

int pqfformat (const pg젠 토토ult *res,
              int column_number);

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

pqftype

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

OID pqftype (const pg젠 토토ult *res,
            int column_number);

시스템 테이블을 쿼리 할 수 ​​있습니다pg_type이름과 속성을 얻습니다 다양한 데이터 유형 중. 그만큼OID내장 데이터 유형 중 하나입니다 파일에 정의SRC/포함/카탈로그/PG_TYPE.H소스 트리.

pqfmod

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

int pqfmod (const pg젠 토토ult *res,
           int column_number);

수정 자 값의 해석은입니다 유형-특이 적; 그들은 일반적으로 정밀 또는 크기를 나타냅니다 제한. 값 -1은 표시하는 데 사용됩니다"정보 없음". 대부분의 데이터 유형은 수정자를 사용하지 않으며 값은 다음과 같습니다. 항상 -1.

pqfsize

관련 열의 바이트로 크기를 반환합니다 주어진 열 번호로. 열 번호는 시작됩니다 0.

int pqfsize (const pg젠 토토ult *res,
            int column_number);

pqfsize반환 데이터베이스 행 에서이 열에 할당 된 공간은 즉, 서버 내부의 크기입니다 데이터 유형의 표현. (따라서, 그렇지 않습니다 고객에게 정말 유용합니다.) 부정적인 가치 데이터 유형이 가변 길이임을 나타냅니다.

pqbinaryTuples

|pg젠 토토ult텍스트 데이터가 포함 된 경우 이진 데이터와 0이 포함되어 있습니다.

int pqbinaryTuples (const pg젠 토토ult *res);

이 함수는 더 이상 사용되지 않습니다 (사용을 제외하고 와의 연결COPY) 단일 가능합니다.pg젠 토토ult일부에는 텍스트 데이터를 포함합니다 기타의 열 및 이진 데이터.pqfformat선호됩니다.pqbinaryTuples모두가 모두 경우에만 반환합니다 결과의 열은 이진 (형식 1)입니다.

pqgetValue

a의 단일 필드 값을 반환합니다.pg젠 토토ult. 행과 열 숫자는 0에서 시작합니다.

char * pqgetValue (const pg젠 토토ult * res,
                 int row_number,
                 int column_number);

텍스트 형식의 데이터의 경우pqgetValueis Null-Terminated 캐릭터 문자열 표현 필드 값. 이진 형식의 데이터의 경우 값이 데이터 유형에 의해 결정된 이진 표현TypSendandtypreceive함수. (가치는입니다 실제로이 경우에도 제로 바이트가 이어지지만 값이 가능할 가능성이 높기 때문에 일반적으로 유용하지 않습니다. 내장 널 포함.)

필드 값이 있으면 빈 문자열이 반환됩니다. 널. 보다PQGETISNULLto 널 값을 빈 스트링 값과 구별합니다.

포인터가 반환pqgetValue스토리지를 가리 킵니다 의 일부pg젠 토토ult구조. 가리키는 데이터를 수정해서는 안되며 데이터를 다른 스토리지에 명시 적으로 복사해야합니다. 그것이 수명을 지나서 사용되는 경우pg젠 토토ult구조 자체.

PQGETISNULL

널 값에 대한 필드를 테스트합니다. 행 및 열 번호 0에서 시작합니다.

int pqgetisnull (const pg젠 토토ult *res,
                int row_number,
                int column_number);

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

pqgetLength

필드 값의 실제 길이를 바이트로 반환합니다. 행 및 열 숫자는 0에서 시작합니다.

int pqgetlength (const pg젠 토토ult *res,
                int row_number,
                int column_number);

이것은 특정 데이터의 실제 데이터 길이입니다. 값, 즉, 객체의 크기는pqgetValue. 텍스트 데이터의 경우 형식 이것은와 동일합니다.strlen (). 이진 형식의 경우 이것은입니다 필수 정보. 하나는아님의존pqfsize실제 데이터를 얻으려면 길이.

PQPRINT

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

void pqprint (파일* fout, /* 출력 스트림* /
             const pg젠 토토ult *res,
             const pqprintopt *po);

typedef struct 
    PQBOOL 헤더;      / * 출력 필드 제목 및 행 카운트 인쇄 */
    pqbool 정렬;       / * 채우기 필드 정렬 */
    PQBOOL 표준;    / * Old Brain Dead 형식 */
    PQBOOL HTML3;       / * 출력 HTML 테이블 */
    PQBOOL 확장;    / * 테이블 확장 */
    PQBOOL 호출기;       / * 필요한 경우 출력을 위해 호출기를 사용하십시오 */
    char *fieldsep;   / * 필드 분리기 */
    char *tableopt;   / * HTML 테이블 요소의 속성 */
    char *캡션;    / * HTML 테이블 캡션 */
    char ** fieldname; / * 교체 필드 이름의 널리 터진 배열 */
 pqprintopt;

이 함수는 이전에 사용되었습니다PSQL쿼리 결과를 인쇄하려면 이것은 더 이상 그렇지 않습니다. 그것은 모든 것을 가정합니다 데이터는 텍스트 형식입니다.

27.3.3. 결과 정보 검색 다른 명령

이 함수는에서 정보를 추출하는 데 사용됩니다.pg젠 토토ult그렇지 않은 개체select결과.

44999_45012

SQL 명령에서 명령 상태 태그를 반환합니다 생성 한pg젠 토토ult.

char * pqcmdstatus (pg젠 토토ult * res);

일반적으로 이것은 명령의 이름 일뿐입니다. 행 수와 같은 추가 데이터를 포함 할 수 있습니다. 가공.

pqcmdtuples

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

char * pqcmdtuples (pg젠 토토ult * res);

SQL명령 생성 한pg젠 토토ultwas삽입, 업데이트, 삭제, 움직임또는fetch, 이것은 포함 된 문자열을 반환합니다 영향을받는 줄의 수. 명령이 무엇이든 경우 그렇지 않으면 빈 문자열을 반환합니다.

pqoidvalue

OID 반환삽입 된 행의 경우SQL명령은삽입정확히 하나의 행을 삽입했습니다 OID가있는 테이블. 그렇지 않으면 반환Invalidoid.

OID pqoidValue (const pg젠 토토ult *res);
pqoidstatus

삽입 된 행의 OID가있는 문자열을 반환합니다. 그만큼SQL명령은삽입. (문자열은0삽입정확히 하나의 행을 삽입하지 않았습니다 대상 테이블에 OID가없는 경우.) 명령 인 경우 아니었다삽입, 반환합니다 빈 문자열.

char * pqoidstatus (const pg젠 토토ult * res);

이 함수는에 찬성하여 더 이상 사용되지 않습니다.pqoidvalue. 스레드-안전이 아닙니다.

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

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

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

탈출 할 필요가 없거나 정확하지 않다는 점에 유의하십시오. 데이터 값이 별도의 매개 변수로 전달되는 경우48999_49013또는 형제 루틴.

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

PQESCAPESTRINGCONN탈출 한 버전의From문자열to버퍼, 스페셜을 탈출합니다 그들이 어떤 해를 끼칠 수 없도록 캐릭터를 추가하고 제로 바이트 종단. 주변을 둘러싼 단일 따옴표PostgreSQL문자열 리터럴입니다 결과 문자열에 포함되지 않음; 그들은 제공되어야한다 결과가 삽입 된 SQL 명령. 매개 변수From첫 번째 캐릭터를 가리 킵니다 탈출 할 문자열의길이매개 변수는 바이트 수를 제공합니다 이 문자열. 종료 제로 바이트는 필요하지 않습니다 계산해서는 안됩니다길이. (만약에 종료 제로 바이트가 이전에 발견되었습니다길이바이트가 처리 됨,PQESCAPESTRINGCONN0에서 멈 춥니 다. 그만큼 따라서 행동은 오히려strncpy.)to적어도 하나 이상의 바이트를 잡을 수있는 버퍼를 가리키십시오. 값의 두 배보다길이, 그렇지 않으면 행동이 정의되지 않습니다. 행동도 마찬가지입니다 정의되지 않은 경우toFrom문자열 중첩.

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

PQESCAPESTRINGCONN반환합니다 작성된 바이트 수to종료 제로 바이트 포함.

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

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

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

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

PQESCAPEBYTEACONN

SQL 명령 내에서 사용하기 위해 이진 데이터를 Escapes 유형BYTEA. 와 마찬가지로PQESCAPESTRINGCONN, 이것은입니다 데이터를 SQL에 직접 삽입 할 때만 사용됩니다 명령 문자열.

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

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

theFrom매개 변수 포인트 탈출 할 문자열의 첫 바이트에 그리고from_length매개 변수 이 바이너리 스트링에서 바이트 수를 제공합니다. (에이 제로 바이트 종단은 필요하거나 계산되지 않습니다.) 그만큼to_length매개 변수 포인트 결과적인 탈출 된 문자열을 보유 할 변수로 길이. 이 결과 문자열 길이에는 다음이 포함됩니다 결과의 제로 바이트 종단.

PQESCAPEBYTEACONN탈출 한 버전의 반환From메모리에있는 매개 변수 바이너리 문자열 할당malloc (). 이 메모리는를 사용하여 해제되어야합니다.pqfreemem ()결과가 아니오 인 경우 더 오래 필요합니다. 반환 문자열에는 모두 특별합니다 캐릭터가 올바르게 될 수 있도록 캐릭터가 교체되었습니다 에 의해 처리PostgreSQL문자열 리터럴 파서, 그리고BYTEA입력 함수. 에이 제로 바이트 종단도 추가됩니다. 단일 따옴표 주변을 둘러싼PostgreSQL문자열 리터럴은 아닙니다 결과 문자열의 일부.

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

PQESCAPEBYTEA

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

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

유일한 차이점PQESCAPEBYTEACONNPQESCAPEBYTEAapgconn매개 변수. 때문에 이것은에 따라 동작을 조정할 수 없습니다 연결 속성 (특히, 여부 표준 정보 문자열이 활성화 됨) 및잘못 될 수 있습니다 결과. 또한 오류를 반환 할 방법이 없습니다 실패에 관한 메시지.

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

PQUNESCAPEBYTEA

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

부호없는 char *pqunescapebytea (const unsigned char *from, size_t *to_length);

theFrom매개 변수 포인트 와 같은 문자열에pqgetValueA에 적용되는 시점BYTEA열.PQUNESCAPEBYTEA이 문자열을 변환합니다 이진 표현으로의 표현. 돌아옵니다 로 할당 된 버퍼에 대한 포인터malloc ()또는 오류가 발생하지 않고 버퍼의 크기to_length. 결과는 해제되어야합니다 사용PQFREEMEM언제 더 이상 필요하지 않습니다.

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

PQFREEMEM

무료로 할당 된 메모리가libpq.

void pqfreemem (void *ptr);

무료로 메모리가 할당libpq특히PQESCAPEBYTEACONN, PQESCAPEBYTEA, PQUNESCAPEBYTEApqnotifies. Microsoft가 필요합니다 DLL을 가로 질러 메모리를 자유롭게 할 수없는 Windows 멀티 스레드 DLLS (/mdvc6) 사용됩니다. 다른 플랫폼에서는이 기능이 동일합니다 표준 라이브러리 기능free ().