他のバージョンの文書 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

1.3. 問い合わせ実行関数

いったんデータベースサーバへの接続の確立が成功すれば、この節で説明する関数を使ってSQLの問い合わせやコマンドを実行します。

1.3.1. 主なルーチン

PGresult構造体は、バックエンドからの問い合わせ結果をカプセル化したものです。libpqアプリケーションのプログラマは、PGresultによる抽象化に注意を払うべきです。PGresultの内容は以下に挙げるアクセッサ関数を使って取り出してください。PGresult構造体中のフィールドは将来予告なく変更されることがあります。ですから直接フィールドを参照することは避けてください(PostgreSQLリリース6.4 の初期の段階から、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の値の2倍以上を保持できるバッファでなければなりません。さもなくば、この動作は不定となります。 PQescapeString を呼び出すことで、from 文字列を、特別な文字を安全なものに置き換え、終端を示すゼロバイトを追加して、エスケープしたものがtoに書き出されます。 PostgreSQL の文字列リテラルを括らなければならない単一引用符は、結果文字列には含まれません。

PQescapeStringtoに書き出された文字数を返します。ただし、終端を示すゼロバイトは含まれません。 to from 文字列バッファが重なる場合の動作は不定です。

1.3.3. SQL 問い合わせに含まれるバイナリ文字列のエスケープ

PQescapeBytea SQL 問い合わせ内で使用されるバイナリ文字列(bytea 型)をエスケープします。

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

ある ASCII 文字は、SQL 文内の bytea 型の文字列リテラルの一部として使用される場合、エスケープされる必要があります(全ての文字をエスケープしても構いません)。一般的に文字をエスケープするためには、それを 10進のASCII 値を 3桁の8進数字に変換し、その前に2つのバックスラッシュを付けます。単一引用符(')とバックスラッシュ(\)文字は別途特別なエスケープシーケンスを持ちます。より詳細は、 ユーザガイド を参照して下さい。 PQescapeBytea は、こういった操作を行い、最低限必要な文字だけをエスケープします。

from 引数は、エスケープ対象とする文字列の先頭文字を指し、from_length 引数はこのバイナリ文字列内の文字数を反映します(終端を示すゼロバイトは不要で、カウントされません)。to_length 引数は、結果となるエスケープされた文字長を保持するためのバッファを指します。結果文字列長には、終端を示すゼロバイトは含まれません。

PQescapeByteafrom 引数のバイナリ文字列をエスケープしたものを、呼び出し側が用意したバッファに返します。返された文字列は、PostgreSQL 文字列リテラルパーサと bytea 入力関数で適切に処理されるように置換された、全ての特殊な文字列を持ちます。終端を示すゼロバイトも追加されます。PostgreSQLの文字列リテラルを括らなければならない単一引用符は、結果文字列には含まれません。

1.3.4. SELECTコマンドの結果情報の入手

1.3.5. SELECT 結果値の入手

1.3.6. SELECT以外のコマンドの結果情報の入手