27.3. ����ִ�к���

һ�������ݿ�����������ӳɹ���������������������ĺ���ִ�� SQL ��ѯ�����

27.3.1. ������

PQexec

���������ύһ������ҵȴ������

PGresult *PQexec(PGconn *conn, const char *command);

����һ��PGresultָ�����Ҳ������һ�� NULL ָ�롣 ͨ������һ���ǿգ�non-NULL����ָ�룬 ����û���ڴ���������ܰ�����͵����������������ش��� ������ص��� NULL����Ӧ�ñ�����PGRES_FATAL_ERROR������� ��PQerrorMessage��ȡ�йش���ĸ�����Ϣ��

���ǿ������������ִ��������� SQL ����÷ֺŷָ�������һ�� PQexec �����з��͵Ķ����ѯ����һ�������ﴦ��ģ������ڲ�ѯ�ִ�������ȷ�� BEGIN/COMMIT �������ڰ������ִ��ָ��ɶ��������ע���������ص� PGresult �ṹֻ�����ִ���ִ�е����һ������Ľ���� �����һ������ʧ�ܣ���ô�ִ�����Ĺ��̾ͻ�ֹͣ���ҷ��ص� PGresult ����������������

PQexecParams

��������ύһ������ҵȴ���������ж���Ĵ����� SQL �����ı������IJ�����������

PGresult *PQexecParams(PGconn *conn,
                       const char *command,
                       int nParams,
                       const Oid *paramTypes,
                       const char * const *paramValues,
                       const int *paramLengths,
                       const int *paramFormats,
                       int resultFormat);

PQexecParams ���� PQexec�������ṩ�˶���Ĺ��ܣ� ����ֵ���Զ���������������������ҿ���Ҫ���ѯ����ĸ�ʽ���ı����߶����Ƹ�ʽ�� PQexecParams ֻ����Э�� 3.0 �Լ��Ժ�İ汾��֧�֣���ʹ�� 2.0 �İ汾��ʱ���ʧ�ܡ�

���ʹ���˲�������ô�������� $1��$2���ȵ��������ִ������õġ� nParams ���ṩ�IJ����ĸ������������� paramTypes[]�� paramValues[]��paramLengths[]���� paramFormats[] �ij��ȡ� ����� nParams ���㣬��ô����ָ������� NULL���� paramTypes[] �� OID ����ʽ�����˸���������ŵ��������͡� ��� paramTypes �� NULL����������������Ԫ�����㣬 ��ô����������Ӧ�IJ������Ÿ�����������ı���һ�����������͡� paramValues[] �����ò�����ʵ����ֵ����������еĿ�ָ����ζ�Ŷ�Ӧ�IJ����ǿգ� �������ָ��ָ��һ�������β���ı��ִ����ı���ʽ�����߷������ڴ��ĸ�ʽ�Ķ��������ݣ����ڶ����Ƹ�ʽ���� paramLengths[] ���������Ƹ�ʽ������ʵ�����ݳ��ȡ� ���ڿղ������ı���ʽ�IJ��������������������û�ж����Ʋ�������ô�������ָ������ǿա� paramFormats[] ����ij���������ı����������з�һ���㣩���Ƕ����ƣ��������з�һ��1���� ����������ָ���ǿգ���ô���в�������Ϊ���ı��ġ� resultFormat Ϊ�����ȡ���ı���ʽ���صĽ����Ϊһ���ȡ�Զ�������ʽ���صĽ���� ��Ŀǰ���ܹ涨�Ӳ�ͬ���ֶλ�ȡ��ͬ��ʽ�Ľ�������ܶ��²��Э���ǿ��ܵġ���

PQexecParams �� PQexec ����Ҫ�����������ǿ��Ժ�����ֿ���������ֵ�� �����Ϳ��Ա���������IJ��Һ����׳������������ݡ� �� PQexec ��ͬ���ǣ�PQexecParams ��һ���������ִ����������һ�� SQL ��� ����������зֺţ����Dz��ó���һ���ǿյ�����������²��Э���һ�����ƣ� ����Ҳ��Щ����ĺô����������������һ���ֹ SQL ע�乥���IJ�Ρ�

PQprepare

�ø����IJ����ύ���󣬴���һ��׼���õ���䣬Ȼ��ȴ�������

PGresult *PQprepare(PGconn *conn,
                    const char *stmtName,
                    const char *query,
                    int nParams,
                    const Oid *paramTypes);

PQprepare ����һ��Ϊ���� PQexecPrepared ִ���õ�׼������䡣 �������������Щ�ظ�ʹ�õ����ֻ�����͹滮һ�Σ�������ÿ��ִ�ж������滮�� ����������ڵ�ǰ�Ự��ǰ���Ѿ�׼���á� ֻ����Э�� 3.0 ���Ժ��������֧�� PQprepare����ʹ�� 2.0 Э���ʱ������ʧ�ܡ�

��������� query �ִ��ﴴ��һ���� stmtName ��׼���õ���䣬 query ����ֻ����һ�� SQL ���stmtName ������ ""�� �����ʹ���һ����������䣬��������£��κ�ǰ����ڵ�������䶼���Զ������棻 �������������Ѿ��ڵ�ǰ�Ự�ﶨ�壬�Ǿ���һ������ ���ʹ���˲�������ô�ڲ�ѯ���������ó� $1��$2 �ȵȡ� nParams �Dz����ĸ��������������������� paramTypes[] �������������ˡ� ����� nParams ���㣬��ô�������ָ������� NULL���� paramTypes[] �� OID �ķ�ʽ������������Ź������������͡� ��� paramTypes Ϊ NULL������������ij���ض�Ԫ�����㣬 ��ô���������ô����������ı�ͬ���ķ���������������Ÿ����������͡� ���У���ѯ����ʹ�ñ� nParams ��ֵ����IJ������ű�ţ� ��Щ��������������Ҳ����һ���ķ����Ƶ��ġ�

�� PQexec ���ƣ����ͨ����һ�� PGresult ���� �����ݱ������������dzɹ�����ʧ�ܡ��յĽ����ʾ�ڴ�ľ�������ȫ���ܷ������ ʹ�� PQerrorMessage ��ȡ�й��������ĸ�����Ϣ��

Ŀǰ��û���κη������԰������ǵõ����Ƶ���������Щ paramTypes[] ����û����������֮������ʵ���������͡� ���� libpq ��һ�����ԣ������汾���ܻ������㡣

���� PQexecPrepared ��׼�������Ҳ����ͨ��ִ�� SQL PREPARE ����������� ������ PQprepare ������Ϊ����Ҫ��Ԥ�������������͡��� ���У�����û�� libpq ��������ɾ��һ��׼������䣬 SQL DEALLOCATE ���ȴ����ɾ����

PQexecPrepared

����һ������ִ��һ�����и���������׼���õ���䣬���ҵȴ������

PGresult *PQexecPrepared(PGconn *conn,
                         const char *stmtName,
                         int nParams,
                         const char * const *paramValues,
                         const int *paramLengths,
                         const int *paramFormats,
                         int resultFormat);

PQexecPrepared �� PQexecParams ���ƣ� ����Ҫִ�е�������ͨ������һ��ǰ��׼���õ���������ģ������Ǹ���һ����ѯ�ִ��� �������������ЩҪ�ظ�ʹ�õ�����ֻ����һ�η����͹滮��������ÿ��ִ�ж���һ�顣 PQexecPrepared ֻ��Э�� 3.0 ���Ժ�İ汾��֧�֣���ʹ�� 2.0 �汾��Э���ʱ�����ǻ�ʧ�ܡ�

������ PQexecParams һ����ֻ�Ǹ�������һ��׼�����������֣�������һ����ѯ�ִ��� ����û�� paramTypes[] ������û��Ҫ����Ϊ׼�������IJ����������ڴ�����ʱ��ȷ���ģ���

PGresult �ṹ��װ�˷��������صĽ����libpq Ӧ��С��ά�� PGresult �ij��� ʹ������ķ��ʺ�����ȡ PGresult �����ݡ�����ֱ������ PGresult ������ֶΣ� ��Ϊ������δ���汾����ܻᱻ�޸ġ�

PQresultStatus

��������Ľ��״̬��

ExecStatusType PQresultStatus(const PGresult *res);

PQresultStatus���Է���������ֵ֮һ��

PGRES_EMPTY_QUERY

���͸����������ִ��ǿյ�

PGRES_COMMAND_OK

�ɹ����һ�����������ݵ�����

PGRES_TUPLES_OK

�ɹ�ִ��һ���������ݵIJ�ѯ��ѯ������ SELECT ���� SHOW����

PGRES_COPY_OUT

���ӷ�������Copy Out �������������ݴ��俪ʼ

PGRES_COPY_IN

Copy In �������룩���������������ݴ��俪ʼ

PGRES_BAD_RESPONSE

����������Ӧ�޷����

PGRES_NONFATAL_ERROR

������һ������������֪ͨ���߾��棩

PGRES_FATAL_ERROR

������һ����������

������״̬�� PGRES_TUPLES_OK�� ��ô����������ĺ����Ӳ�ѯ�ķ����г�ȡԪ����Ϣ�� ע��һ�����ɼ���������Ԫ���SELECT��Ȼ��ʾ PGRES_TUPLES_OK�� PGRES_COMMAND_OK���ڲ�����Ԫ������INSERT��UPDATE���ȣ��� ���� PGRES_EMPTY_QUERY ����Ӧͨ����ζ�ű�¶�˿ͻ����������ij��档

״̬Ϊ PGRES_NONFATAL_ERROR �Ľ����Զ����ֱ���� PQexec ����������ѯִ�к������أ�����Ľ���ᱻ���ݸ�֪ͨ������������ Section 27.10����

PQresStatus

��PQresultStatus���ص�ö������ת����һ������״̬����ַ��������� �����߲�Ӧ���ͷŽ����

char *PQresStatus(ExecStatusType status);

PQresultErrorMessage

�������ѯ�����Ĵ�����Ϣ������û�д���ʱ����һ�����ַ�����

char *PQresultErrorMessage(const PGresult *res);

����д�����ô���ص��ִ�������һ����β�����С� �����߲�Ӧ��ֱ���ͷŽ��������ص� PGresult ������ݸ� PQclear ֮�������Զ��ͷš�

������һ�� PQexec �� PQgetResult ���ú��棬PQerrorMessage �������ӣ��������� PQresultErrorMessage ���Խ����һ�����ַ����� ������һ��PGresult�������������Ϣֱ����ɾ���� ������Ĵ�����Ϣ���ں����IJ������ʱ���ı䡣������֪����ij�� PGresult�������״̬ʱ�� PQresultErrorMessage��������֪�������ӵ����һ�������������״̬ʱ�� PQerrorMessage��

PQresultErrorField

����һ�������Ĵ��󱨸��ֶΡ�

char *PQresultErrorField(const PGresult *res, int fieldcode);

fieldcode ��һ�������ֶα�ʶ�������������г��ķ��š� ��� PGresult ���Ǵ�����߾��������߲�����ָ�����ֶΣ���ô���� NULL�� �ֶ�ֵͨ������������β�����С������߲�Ӧ��ֱ���ͷŽ���� ��������� PGresult ������ݸ� PQclear ֮���������Զ��ͷš�

���д����ǿ��õģ�

PG_DIAG_SEVERITY

���س̶ȣ�����ֶε������� ERROR��FATAL������ PANIC���ڴ�����Ϣ������� WARNING��NOTICE�� DEBUG��INFO������ LOG����ע����Ϣ��� ��������Щ������һ�����ػ����롣���dz��֡�

PG_DIAG_SQLSTATE

�������� SQLSTATE ���롣SQLSTATE �����ʾ�������Ĵ�������ͣ� ������ǰ��Ӧ�����ڶ��ض������ݿ����ִ���ض��IJ���������������� ���ڿ��ܵ� SQLSTATE ������б������ Appendix A�� ����ֶ��Dz������򻯵ģ��������dz��֡�

PG_DIAG_MESSAGE_PRIMARY

��Ҫ������ɶ�����Ϣ��ͨ���������������dz��֡�

PG_DIAG_MESSAGE_DETAIL

ϸ�ڣ�һ����ѡ�Ĵ���������Ϣ�������и����йظ������ϸ�ڡ������ж��С�

PG_DIAG_MESSAGE_HINT

��ʾ��һ����ѡ���й���δ��������Ľ��顣 ����ϸ�ڵ����������ṩ�˽��飨���ܲ�̫���ʣ�����������ʵ�������кü��С�

PG_DIAG_STATEMENT_POSITION

һ������ʮ�����������ִ�������һ�������α�ʹ�ã�ָ���������䴮����ĵط����±ꡣ ��һ���ַ��������� 1���������λ�������ַ��ƣ����������ֽڼơ�

PG_DIAG_INTERNAL_POSITION

����� PG_DIAG_STATEMENT_POSITION �ֶζ�����һ���ģ� �������������ڲ����ɵ�������±�ָʾ�������ǿͻ����ύ����� �������������ֶΣ���ô PG_DIAG_INTERNAL_QUERY �ֶ�Ҳ���dz��֡�

PG_DIAG_INTERNAL_QUERY

һ��ʧ�ܵ��ڲ����ɵ�������ı��� ���磬���������һ�� PL/pgSQL ���������� SQL ��ѯ��

PG_DIAG_CONTEXT

һ��ָʾ���������������Ļ�����Ŀǰ���������Ծ�Ĺ������Ժ������ڲ����ɵIJ�ѯ�ĵ��ö�ջ�� ��ջ��ÿ��һ��������������档

PG_DIAG_SOURCE_FILE

������Ĵ����Դ����λ�õ������ļ���

PG_DIAG_SOURCE_LINE

���������������ڵ�Դ����λ�õ��кš�

PG_DIAG_SOURCE_FUNCTION

������������Դ���뺯�������֡�

���������Ҫ���ʽ����ʾ��Ϣ�ǿͻ��˵����Σ��ر��Ǹ�����Ҫ�Գ��н������С� �ڴ�����Ϣ�ֶ�����ֵ������ַ�Ӧ�õ����ֶη��ţ������ǻ��С�

libpq ���ɵĴ��󽫻��������Ժ�����Ϣ�� ����ͨ��û�������ֶΡ�3.0 Э��֮ǰ���صĴ��󽫰��������Ժ�����Ϣ�� ��ʱ������ϸ��Ϣ������û�������ֶΡ�

��ע����Щ�����ֶ�ֻ�ܴ� PGresult �������ã� ������ PGconn ����û�� PQerrorField ������

PQclear

PQclear �ͷ���PGresult������Ĵ洢�ռ䡣 �κβ�����Ҫ�IJ�ѯ����ڲ���Ҫ��ʱ��Ӧ����PQclear�ͷŵ���

void PQclear(PGresult *res);

ֻҪ����Ҫ������Ա���PGresult�������ⳤ��ʱ�䣻 �����ύ�µIJ�ѯʱ��������ʧ��������Ͽ����Ӻ�Ҳ�������� Ҫɾ�������������� PQclear������ô�����������Ӧ���е��ڴ�й©��

PQmakeEmptyPGresult

����һ�����и�����״̬�ģ��յ�PGresult����

PGresult* PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status);

����libpq���ڲ������� ���ڷ���ͳ�ʼ��һ����PGresult���� �����������ΪһЩӦ����Ҫ�������ɽ�������������ض��Ĵ��д���״̬�Ķ��󣩡� ���conn�ǿգ�NULL������״ָ̬ʾһ������ ���ӵ�ǰ�Ĵ�����Ϣ��������PGresult�� ע�����նԸö�����Ҫ����PQclear�� ����libpq�����ص�PGresultһ����

27.3.2. ������ѯ�����Ϣ

��Щ�������ڴ�һ�������ųɹ���ѯ�����Ҳ����˵��״̬Ϊ PGRES_TUPLES_OK �IJ�ѯ�� �� PGresult ���󡣶�������״ֵ̬�Ķ������ǵ���Ϊ��������������к�����һ����

PQntuples

���ز�ѯ�������У�Ԫ�飩������

int PQntuples(const PGresult *res);

PQnfields

���ز�ѯ����������е��������ֶΣ��ĸ�����

int PQnfields(const PGresult *res);

PQfname

���������������������������������ֶΣ������ơ��������Ŵ� 0 ��ʼ�� �����߲�Ӧ��ֱ���ͷŽ������������� PGresult ������ݸ� PQclear ֮�󣬽���ᱻ�Զ��ͷš�

char *PQfname(const PGresult *res,
	    int column_number);

����ֶα�ų�����Χ����ô����NULL��

PQfnumber

�����������������������������������ֶΣ��ı�š�

int PQfnumber(const PGresult *res,
	      const char *column_name);

������������ֲ�ƥ���κ��ֶΣ����� -1��

�����������ǵ��� SQL �������һ����ʶ�������ģ�Ҳ����˵�����û�м�˫���ţ� ��ô��ת��ΪСд�����磬���������һ���� SQL ���������ɵIJ�ѯ���

select 1 as FOO, 2 as "BAR";

��ô���ǻ�������Ľ����

PQfname(res, 0)              foo
PQfname(res, 1)              BAR
PQfnumber(res, "FOO")        0
PQfnumber(res, "foo")        0
PQfnumber(res, "BAR")        -1
PQfnumber(res, "\"BAR\"")    1

PQftable

��������ץȡ���ֶ����ڵı�� OID���ֶα�Ŵ� 0 ��ʼ��

Oid PQftable(const PGresult *res,
             int column_number);

����ֶα�ų����˷�Χ�������������ֶβ���һ��ָ��ij������ֶεļ����ã� ����ʹ���� 3.0 �汾֮ǰ��Э�飬��ô�ͻ᷵�� InvalidOid�� ����Բ�ѯϵͳ�� pg_class ���жϾ����������ĸ���

������� libpq ͷ�ļ���ʱ�� �ͻᶨ������ Oid �ͳ��� InvalidOid�� ���Ƕ�����ͬ���������͡�

PQftablecol

������������IJ�ѯ����ֶε��ֶκţ������ı��ڲ�������ѯ����ֶα�Ŵ� 0 ��ʼ�����DZ��ֶα�Ų����� 0��

int PQftablecol(const PGresult *res,
                int column_number);

����ֶα�ų�����Χ�������������ֶβ�����һ�����ֶεļ����ã�����ʹ�õ��� 3.0 ֮ǰ��Э�飬��ô�����㡣

PQfformat

����˵�������ֶεĸ�ʽ�ĸ�ʽ���롣�ֶα�Ŵ� 0 ��ʼ��

int PQfformat(const PGresult *res,
              int column_number);

��ʽ��Ϊ 0 ��ʾ�ı����ݣ�����ʽ����һ��ʾ���������ݡ����������뱣�����������塣��

PQftype

����������������Ź��������������͡� ���ص�������һ�������͵��ڲ� OID �š��������Ŵ�0 ��ʼ��

Oid PQftype(const PGresult *res,
	    int column_number);

����Բ�ѯϵͳ�� pg_type �Ի�ȡ�����������͵����ƺ����ԡ� �ڽ����������͵� OID ��Դ������ src/include/catalog/pg_type.h �ļ��ﶨ�塣

PQfmod

����������ֶα����������������δʡ� �ֶα�Ŵ� 0 ��ʼ��

int PQfmod(const PGresult *res,
	   int column_number);

�������η���ֵ��������صģ�����ͨ���������Ȼ��߳ߴ����ơ���ֵ -1 ���ڱ�ʾ"û�п�����Ϣ"�� ������������Ͳ������δʣ���������¸�ֵ���� -1��

PQfsize

����������ֶα�Ź������ֶ����ֽڼƵĴ�С�� �ֶα�Ŵ�0 ��ʼ��

int PQfsize(const PGresult *res,
	    int column_number);

PQfsize���������ݿ���������������ֶη���Ŀռ䣬 ���仰˵���Ǹ����������ڷ�������Ķ�������ʽ�Ĵ�С���ߴ磩�� ����ˣ�����Կͻ���û��ʲô�á��� ������������ǿɱ�ߴ磬���� -1��

PQbinaryTuples

���PGresult����������Ԫ������ʱ���� 1�� ������� ASCII ���ݷ��� 0��

int PQbinaryTuples(const PGresult *res);

��������Ѿ������ˣ����˻������� COPY ����֮�⣩����Ϊ���ǿ�����һ�� PGresult ��ijЩ�ֶ�������ı����ݣ�������һЩ�ֶΰ������������ݡ� ���õ���ʹ�� PQfformat�� PQbinaryTuples ֻ���ڽ���е������ֶζ��Ƕ����ƣ���ʽ 1����ʱ��ŷ��� 1��

PQgetvalue

����һ��PGresult ����һ�еĵ�����һ���ֶε�ֵ�� �к��ֶα�Ŵ� 0 ��ʼ�������߲�Ӧ��ֱ���ͷŽ�����ڰ� PGresult ������ݸ� PQclear ֮�󣬽���ᱻ�Զ��ͷš�

char *PQgetvalue(const PGresult *res,
		 int row_number,
		 int column_number);

�����ı���ʽ�����ݣ� PQgetvalue ���ص�ֵ��һ����ʾ�ֶ�ֵ�Ŀգ�NULL����β���ַ����� ���ڶ����Ƹ�ʽ�� ���ص�ֵ�����ɸ��������͵� typsend �� typreceive �����Ķ����Ʊ�����ʽ�� ������������£���ֵʵ����Ҳ����һ���ֽ��㣬����ͨ������ֽ�ûʲô�ô�����Ϊ��ֵ����ܿ��ܰ�����Ƕ�Ŀա���

����ֶ�ֵ�ǿգ��򷵻�һ�����ִ������� PQgetisnull �������ֵ�Ϳ��ִ�ֵ��

PQgetvalue ���ص�ָ��ָ��һ�������� PGresult�ṹ��һ���ֵĴ洢�������Dz��ܸ������� �����������Ҫ��PGresult�ṹ�������ں�Ҫʹ�����Ļ��� ���DZ�����ȷ�ذѸ���ֵ�����������洢���С�

PQgetisnull

����һ���ֶ��Ƿ�Ϊ�գ�NULL�����к��ֶα�Ŵ� 0 ��ʼ��

int PQgetisnull(const PGresult *res,
		int row_number,
		int column_number);

���������� NULL���������� 1����������ǿգ�non-null ��ֵ������ 0�� ��ע�⣬��һ�� NULL ������PQgetvalue ������һ�����ַ����� ����һ����ָ�롣��

PQgetlength

�������ֽڼƵ��ֶεij��ȡ��к��ֶα�Ŵ� 0 ��ʼ��

int PQgetlength(const PGresult *res,
		int row_number,
		int column_number);

����ijһ�ض�����ֵ��ʵ�����ݳ��ȡ� �к��ֶα�Ŵ� 0 ��ʼ��

int PQgetlength(const PGresult *res,
                int row_number,
                int column_number);

�����ض���ֵ��ʵ�����ݳ��ȣ�Ҳ����˵��PQgetvalue ָ��Ķ���Ĵ�С�� �����ı����ݸ�ʽ������ strlen() ��ͬ�����ڶ����Ƹ�ʽ������DZ�ڵ���Ϣ�� ��ע��������Ӧ������ PQfsize ��ȡʵ�����ݳ��ȡ�

PQprint

��ָ�����������ӡ���е��кͣ���ѡ�ģ��ֶ����ơ�

void PQprint(FILE *fout,      /* ����� */
	     const PGresult *res,
	     const PQprintOpt *po);

struct {
    pqbool  header;      /* ��ӡ�����ͷ���м��� */
    pqbool  align;       /* ��������ֶ� */
    pqbool  standard;    /* �ɵ�ɵ��ʽ */
    pqbool  html3;       /* ��� HTML �� */
    pqbool  expanded;    /* ��չ�� */
    pqbool  pager;       /* ��Ҫʱ�������ʹ�÷�ҳ�� */
    char    *fieldSep;   /* �ֶηָ��� */
    char    *tableOpt;   /* �� HTML ��� table ... */
    char    *caption;    /* HTML caption */
    char    **fieldName; /* �滻�ֶ�����ɵĿ����β������ */
} PQprintOpt;

���������ǰ�� psql ���ڴ�ӡ��ѯ��������������Ѿ�������������ˡ���ע�����������е����ݶ����ı���ʽ��

27.3.3. ������������Ľ����Ϣ

��Щ�������ڴ� PGresult �����������Щ�� SELECT �������Ϣ��

PQcmdStatus

���ز���PGresult�� SQL ���������״̬�ַ�����

char *PQcmdStatus(PGresult *res);

ͨ����ֻ����������֣����������ܰ�����������ݣ����紦����������� �����߲�Ӧ���ͷŽ����������ڰ� PGresult ������ݸ� PQclear ��ʱ���ͷš�

PQcmdTuples

���ر� SQL ����Ӱ����е�������

char *PQcmdTuples(PGresult *res);

�����������һ��������� PGresult ����� SQL ���Ӱ����������ִ��� �������ֻ������ INSERT��UPDATE��DELETE��MOVE�� ���� FETCH ���ִ��֮��Ľ����������һ������ INSERT��UPDATE�� ���� DELETE ��� EXECUTE ��һ��׼���õIJ�ѯ�� ���������� PGresult �������������Ķ�������ô PQcmdTuples ����һ�����ִ��� �����߲�Ӧ��ֱ���ͷŷ��ص���ֵ����������� PGresult �����ݸ� PQclear ֮�����ᱻ�Զ��ͷš�

PQoidValue

����һ��������еĶ����ʶ��OID������ ���SQL ������INSERT��������һ���������� INSERT ����׼���õ� EXECUTE��ʱ�򡣷��򣬺������� InvalidOid������� INSERT Ӱ��ı����� OID�� Ҳ���� InvalidOid��

Oid PQoidValue(const PGresult *res);

PQoidStatus

��� SQL ������INSERT�����߰������� INSERT ��׼������� EXECUTE �ˡ�����һ����������е� OID ���ִ��� ����� INSERT ����ǡ�ò���һ�У�����Ŀ���û��OID����ô�ִ����� 0���� ��������INSERT���򷵻�һ�����ִ���

char *PQoidStatus(const PGresult *res);

��������Ѿ������ˣ���Ϊ���� PQoidValue��������Ҳ�����̰߳�ȫ�ġ�

27.3.4. ���ݰ����� SQL �����е��ִ�

PQescapeStringΪ�� SQL ������ʹ���ִ�����֮�������ݴ��� �������� SQL �����������ֵ�����ı����������ʱ������á���Щ�ַ������絥���źͷ�б�ܣ����뱻���ݣ� �Ա������DZ� SQL ��������Ϊ�����ַ�������PQescapeString ִ�����������

��ʾ: ������Ǵ�һ�������ŵ���Դ�յ�һ���ִ��Ļ�����ô��ǡ�������ݾ͸���Ҫ�ˡ� ������а�ȫ��Σ�գ�����յ�"SQL ע��"���������ʱ������㲻�뿴���� SQL ι��������ݿ⡣

��ע�⣬���һ������ֵ����Ϊ PQexecParams ����ͬ�庯����һ�������������ݵģ� ��ô���ݾͼȲ���Ҫ��Ҳ����ȷ��

size_t PQescapeString (char *to, const char *from, size_t length);

���� from ָ��Ҫ���ݵ��ִ��ĵ�һ���ַ��� length ��������������ִ�����ַ��������ִ���β���ֽ��㲻�DZ���ģ�Ҳ������ length�� ������ڴ��� length ���ֽ�֮ǰ������һ���ֽ��㣬 ��ô PQescapeString ������ֽ��㴦ֹͣ�� �����Ϊ���� strncpy���� to Ӧ��ָ��һ������������������������ܱ��� length ��ֵ����������һ�����ַ�������ú�����Ϊ������Ԥ�⡣ ���� PQescapeString �ͻ�����ݵ� from �ִ�ת���� to ���������������ַ��������ǵ����κ����⣬ ����׷����ֹ���ֽ��㡣��Щ�����Χ��PostgreSQL �ִ��ı���Χ�ĵ����Ų������ִ���һ���֣���Ӧ���ڰѵ����ŷ��ڲ��������������SQL������Χ��

PQescapeString ����д�� to ������ַ���Ŀ�� ��������β���ֽ��㡣

��� to �� from �ִ��໥�ص�����ô����Ϊ����Ԥ�⡣

27.3.5. ���ݰ����� SQL �����еĶ������ִ�

PQescapeBytea

������Щ�� SQL ������ʹ�õ��� bytea ��ʾ�Ķ��������ݡ� �� PQescapeString һ�����������ֻ����ֱ���� SQL �ִ��������ݵ�ʱ��ʹ�á�

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

�� SQL ��������� bytea �ִ��ı���һ���ֵ�ʱ�� ��Щ�ֽ�ֵ�������ݣ����Ƕ��������ֽڶ������������ݣ��� ͨ����Ҫ����һ���ֽڣ����DZ�ת����һ����λ�˽������֣� ��������ֵ���ڸ��ֽڵ���ֵ��Ȼ��ǰ׺������б�ܡ� �����ţ�'���ͷ�б���ַ���\�����Լ�������������С����� Section 8.4 ��ȡ������Ϣ�� PQescapeBytea ִ�������������ֻ������Ҫ���ݵ����ٵ��ַ���

from ����ָ����Ҫ���ݵ��ִ��ĵ�һ���ֽڣ� from_length ������ӳ������������ִ�����β���ֽ���Ȳ���ҪҲ���������ڵ��ִ������ֽڵĸ����� to_length ����Ӧ����һ��ָ��ij����������ָ�룬 ���Ŀռ�Ӧ���ܹ��������ݺ�Ľ���ִ����ȡ� ����ִ����Ȳ����������β���ֽ��㡣

PQescapeBytea ���ڴ��ط���һ�� from �����Ķ������ִ������ݺ�İ汾����Ƭ�ڴ����� malloc() ����ģ� �ڽ��������Ҫ��ʱ�򣬱����� PQfreemem() �ͷš� ���ص��ִ��Ѿ�������������ַ��滻���ˣ��������ǾͿ����� PostgreSQL���ִ��ı��������Լ� bytea �����뺯����ȷ�ش��� ͬʱ��׷����һ����β���ֽ��㡣��Щ�����Χ�� PostgreSQL�ִ��ı���Χ�ĵ����Ų������ִ���һ���֡�

PQunescapeBytea

��һ�����������ݵ����ݺ���ִ�������ʽת���ɶ��������� — PQescapeBytea �ķ����á� �����ı���ʽ��ȡ bytea ���ݵ�ʱ���DZ���ģ� �������Զ����Ƹ�ʽ��ȡ��ʱ���Dz���Ҫ�ġ�

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

from ����ָ��һ�����ݺ���ִ��� ���� PQgetvalue �����һ�� bytea �ֶκ󷵻صġ�PQunescapeBytea �������ִ�������ʽת���ɶ�������ʽ�� ������һ���� malloc() �����ָ��û�������ָ�룬 �����dz���ʱ���ؿգ��������ijߴ���� to_length � �ڲ�����Ҫ������֮����Ƭ�ڴ������ PQfreemem() �ͷš�

PQfreemem

�ͷ� libpq ������ڴ档

void PQfreemem(void *ptr);

�ͷ��� libpq ������ڴ棬 �ر��� PQescapeBytea��PQunescapeBytea�� �� PQnotifies������ Microsoft Windows ����ģ� ��Ϊ�����ܿ�Խ DLL �ͷ��ڴ棬����ʹ���˶��̵߳� DLL ��VC6 �е� /MD���� ������ƽ̨�ϣ���������ͱ�׼�Ŀ⺯��free()һ����