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注入攻击的额外防御。