VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

PQexecParams

功能描述

向服务器提交一条命令并且等待结果,还有独立于SQL命令文本传递参数的能力。

接口原型

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

参数说明

参数名 参数说明
conn 建立连接时返回的连接结构体指针,该指针用于标识某个特定连接。
command 要执行的SQL命令字符串。如果使用参数,它们在命令字符串中被叫做$1、 $2等等。
nParams 提供的参数数目;它是paramTypes[]、paramValues[]、 paramLengths[]和paramFormats[]数组的长度。 (当nParams是0时,数组指针可以是NULL。)
paramTypes 通过OID,将声明数据类型指定到参数标记。如果paramTypes 是NULL,或数组中任何的特定参数是0,服务器为参数标记推断数据类型, 采用的方式与一个未定义类型的文本字符串相同。
paramValues[] 声明参数的实际值。在这个数组中的一个空指针表示相应的参数是空; 否则指针指向一个以零结尾的文本字符串(文本格式)或者服务器希望的格式的二进制数据 (二进制格式)。
paramLengths[] 为二进制格式的参数声明实际数据长度。该设置忽略空参数或文本格式的参数。 如果没有二进制参数,那么数组指针可以为空。
paramFormats[] 声明参数为文本(为相应参数在数组条目中放置0)还是二进制格式 (为相应参数在数组条目中放置1)。如果数组指针是空,那么所有参数被看做是文本字符串。以二进制格式传递的值需要能够被后台识别的内部表示。例如,整数必须以网络字节顺序来传递。 传递numeric值需要服务器存储格式的识别,如在 src/backend/utils/adt/numeric.c::numeric_send()和 src/backend/utils/adt/numeric.c::numeric_recv()中那样。
resultFormat 声明0用于以文本格式获得结果,或1用于以二进制格式获得结果。 (目前没有规定以不同的格式来获取不同的结果列,即使底层协议中可能实现)

返回值

返回结果与PQexec函数一致。

其他

PQexecParams相比PQexec的主要优势是参数值可以从命令字符串中分离出来, 因此避免了繁琐和容易出错的引用和转义的需要。和PQexec不同的是,PQexecParams在一个给出的字符串里最多允许一个SQL命令。 (里面可以有分号,但是不得超过一个非空的命令。)这是下层协议的一个限制, 但是也有些好处,比如作为对SQL注入攻击的额外防御。