[pgsql-jp: 31610] Re: Oracleとの更新処理の違い

ISHIDA Akio iakio @ pjam.jpweb.net
2003年 11月 26日 (水) 19:36:04 JST


こんにちは。石田@苫小牧市です。

takada @ lifedesign.co.jp wrote:

> 高田です。岡部さん、ありがとうございます。
> 
> 確かにマニュアルにPREPAREというコマンドがありました。
> が、PHPから発行する方法がわからない、またバインド変数
> の宣言の仕方も書いてないみたいでした。

岡部さんがおっしゃっているように、PREPARE は SQL なので
pg_query() で発行します。バインド変数という言葉は出てきませんが、

http://www.postgresql.jp/document/pg734doc/reference/sql-prepare.html
に
| プリペアードクエリにパラメータを指定するには、PREPARE 文に
| データ型のリストを含めます。 問い合わせ自体では、$1、$2 な
| どを使用した位置によってパラメータを参照します。
とある通りです。

> 普通にPostgreSQLでコーディングする場合は、
> 
> for ($j=1;$j<=20;$j++){
>  pg_query($conn,"
>   insert into DB_TABLE (ID,FIELD_ID,NAME,TYPE,SIZE)
>    values ($j,$FieldName[$j],$FieldType[$j],$FieldName[$j]")
> }
> 
> (適当に書いたので書き損じがあったらすみません)
> のようにするのですか?
> 
> よろしくお願いいたします。

それで済むなら、それでも構わないと思います(色々抜けはありますが)。

PREPARE を PHP から使うことはできますが、
このような処理であれば、PREPARE を使うメリットが
あるかはわかりません。

たぶんこんな感じでしょう。試してませんが。

pg_query($conn,
"PREPARE query1 (int, int, text, int, int) AS"
 . " INSERT INTO DB_TABLE (ID, FIELD_ID, NAME, TYPE, SIZE)"
 . " VALUES (\$1, \$2, \$3, \$4, \$5)");
for ($j = 1; $j <= 20; $j++) {
    pg_query($conn,
      "EXECUTE query1 ("
       . "$j"
       . ", {$FieldId[$j]}"
       . ", '" . pg_escape_string($FieldName[$j]) . "'"
       . ", {$FieldType[$j]}"
       . ", {$FieldSize[$j]})");
}
pg_query($conn, "DEALLOCATE query1");

# かなり脳内補完してます。

-- 
ISHIDA Akio<iakio @ pjam.jpweb.net>





pgsql-jp メーリングリストの案内