[PHP-users 18749]Re: pg_insert()を使って配列を追加したい
Youichi Iwakiri
yiwakiri @ st.rim.or.jp
2003年 11月 1日 (土) 16:58:21 JST
いわきりです
KOYAMA HIDEKI wrote in <20031101031455.43681.qmail @ web1110.mail.yahoo.co.jp> :
>初めて質問させていただきます。PHPをかじり始めたばかりで
>す。Formの複数のCheckboxのデータ(TEXT型)を配列としてPOST
>メソッドで受け取り、PostgreSQLのテーブルに追加したいので
>す。テーブルは配列が入るように作りました。そして以下のス
>クリプトを実行しました。
>しかし、
>Warning: pg_insert() expects parameter 3 to be array,
>string given in /usr/local/apache2/htdocs/name_data.php
>Warning: pg_query(): Query failed: . in
>/usr/local/apache2/htdocs/name_data.php
>と表示され、配列データが追加されません。sql文の前で
第3パラメタとして配列を期待しているが、文字列が渡されたために
上記エラーが出ています。
というのは、おいといて
pg_insert()の使い方がそもそも間違っています。
CREATE TABLE sample (name text, age integer);
で作成したテーブルだと、
$person = array(
'name' => 'your name',
'age' => 10
)
$result = pg_insert($conn, 'sample', $person);
これだけで、内部的に
INSERT INTO sample (name, age) VALUES ('your name', 10);
といったSQLに変換し、queryを行います。
その後に、pg_query()をする必要はありません。
与えようとしている配列ですが、
テーブル内のフィールド名をインデックスとした
連想配列になっていません。
お作りになったテーブルのフィールドがどうなっているか
わかりませんが、PostgreSQLのデータ型として
name text[]
といった配列を宣言しているのであれば、
作成すべきSQLは、
INSERT INTO sample (name) VALUES ('{"text_01", "text_02", "text_03"}');
でしょう。
本題ですが、pg_insertは、配列(PHP側)の展開をして、PostgreSQLが
受け入れられるSQLを生成する術は実装されていません。
自分で、SQLを組み立てないことには、配列へのINSERTは
無理です。
--
Youichi Iwakiri
PHP-users メーリングリストの案内