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 結果資訊