1.3. 命令执行函数

一旦与数据库服务器的联接成功建立,便可用这里描述的函数执行 SQL 查询和命令。

1.3.1. 主过程

PGresult 结构封装了后端返回的结果. libpq 应用程序员应该仔细维护PGresult抽象. 用下面的访问函数来获取PGresult的内容.避免直接引用 PGresult结构的数据域, 因为这个结构可能会在未来被改变. (从 PostgreSQL 版本 6.4 开始, struct PGresult的定义甚至都没有放在 libpq-fe.h里.如果你有一些直接访问 PGresult数据域的老代码, 你可以通过包含libpq-int.h继续使用它们, 但是我们鼓励你立刻修改代码.)

1.3.2. 为包含在 SQL 查询中逃逸字串

PQescapeString 为在 SQL 查询中使用逃逸一个字串.

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

如果你需要在查询字串中包含一个从不可靠的源头接收的字串 (比如,它们是随机用户输入的),那么,出于安全原因, 你不能把它们直接包含在 SQL 查询里. 你应该把特殊字符引起来,否则它们就会被 SQL 分析器代换.

PQescapeString 执行这个操作.from 指向将要逃逸的字串的第一个字符,length 参数计算 在这个字串里的字符数量(字串结尾的字节零不是必须的,也不计入长度). to 应该指向一个缓冲区,这个缓冲区至少能保存 length 数值的两倍还多一个的字符,否则该函数行为将不可预测. 调用 PQescapeString 就会把逃逸的 from 字串 转换到 to 缓冲区,把特殊字符替换掉以免发生意外, 并且追加终止的字节零.那些必须包围在PostgreSQL 字串文本周围的单引号不算结果字串的一部分.

PQescapeString 返回写到 to 里面的字符数目, 不包括结尾的字节零.如果 tofrom 字串相互重叠,那么其行为不可预测.

1.3.3. 逃逸包含在 SQL 查询中的二进制字串

PQescapeBytea 逃逸那些在 SQL 查询中使用二进制字串(bytea 类型).

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

SQL 语句中用做 BYTEA 字串文本的 一部分的时候, 有些 ASCII 字符必需被逃逸 (但是对于所有字符而言是可以逃逸). 通常,要逃逸一个字符,它是被转换成一个三位八进制数字, 该数字数值等于相应的十进制 ASCII 数值,然后前缀 两个反斜扛.单引号(')和反斜扛字符(\)有自己特殊的逃逸序列.参阅 用户手册获取更多信息. PQescapeBytea 执行这个操作,它只逃逸需要逃逸 的最少的字符.

from 参数指向需要逃逸的字串的第一个字符, from_length 参数反映在这个二进制字串 (那种字节零既不必要也不计算在内的字串)里字符的个数. to_length 参数应该是一个指向某个缓冲区的指针, 它的空间应该能够保存逃逸后的结果字串长度. 结果字串长度不包括结果结尾的字节零.

PQescapeBytea 返回一个 from 参数的二进制字串的逃逸后的版本,返回给调用者提供的缓冲区. 返回的字串已经把所有特殊的字符替换调了,这样他们就可以由 PostgreSQL的字串文本分析器以及 bytea 的输入函数 正确地处理.同时还追加了一个结尾的字节零.那些必需包围在 PostgreSQL字串文本周围的单引号不算结果字串的一部分.

PQunescapeBytea 把一个二进制数据的逃逸后的字串表现形式转换成二进制数据 - PQescapeBytea 的反作用.

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

from 参数指向一个逃逸后的字串, 比如 PQgetvalue 从一个 BYTEA 字段返回的.PQunescapeBytea 把 它的字串表现形式转换成二进制形式,填充到一个缓冲区. 它返回一个指向该缓冲区的指针,若为 NULL 则出错, 缓冲区的尺寸放在 to_length 里. 该指针随后可以用做 free(3) 的参数.

1.3.4. 检索 SELECT 的结果信息

1.3.5. 检索 SELECT 结果数值

1.3.6. 检索非-SELECT 结果信息