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