[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 メーリングリストの案内