[pgsql-jp: 32776] Re: PHPで配列変数の挿入について。

yoshiyuki fukutome tome @ nekomyu.org
2004年 4月 13日 (火) 23:04:01 JST


ふくとめです。

> > 配列のままテーブルに格納するのは思いつきませんでした。
> > しかしながら、変数を文字列に表現できるように変換する関数が
> > ありますので、これを利用してみてはいかがでしょうか。
> > 変数のシリアル化、あるいは直列化と呼ぶようです。

> > 詳細は、PHP の serialize, unserialize 関数の説明
> > http://jp2.php.net/manual/ja/function.serialize.php
> > http://jp2.php.net/manual/ja/function.unserialize.php
> 
> 読んでみましたがちょっと難しくて・・・。
> 
> 一度、配列変数を、PHPのimplodeで文字列にさせたあと、
> http://www.postgresql.jp/document/pg742doc/html/functions-array.html
> にでているstring_to_array関数で格納しようとしましたがうまくいきませんでした。
> (取り出すときには使えるのですが。)

変数のシリアル化は、変数(あるいは、オブジェクト)を文字列で表
現できることに意味があります。例を示します。

CREATE TABLE t (
    id serial,
    data text
    );

で作成されるテーブルがあり、PHP の pg_connect で得られる
PostgreSQL への接続リソース $connection があるとします。

====
// PHP において PostgrSQL に変数を文字列に変換して格納する。
$variable = array(1,2,3); // 任意の変数やオブジェクト
$serialized_variable = sreialize($variable);
$sql = "INSERT INTO t(data) VALUES ('$serialize_array');";
$pg_query($connection, $sql);

====
// PostgreSQL から文字列を引き出し、変数へ戻す。
$id = 1; // 取り出したい列の任意の番号
$sql = "SELECT data FROM t WHERE id=$id";
$result = pg_qurey($connection, $sql);
$serialized_variable = pg_fetch_result($result, 0, 0);
$variable = unserialize($serialized_variable);

====
上記のような流れで、PHP の変数を(型を保持したまま) PostgreSQL
のカラムに格納し、また、カラムから取り出すことができます。
但し、この場合、対象のカラムは text 型であることが妥当です。

# PostgreSQL の配列型を利用したいのであれば、この方法では無
いですね。

> '{\"$ar[0]\",\"$ar[1]\",・・・・}'が使えるのがわかりましたので
> それで当分やってみようと思います。
> なにぶん未熟な者ですが解決する方法があったら報告したいと思います。

カラムにひとつずつ配列の各要素を格納していくのも方法のひとつ
ですね。
健闘を祈っております。

では、
-- 
fukutome yoshiyuki
tome @ nekomyu.org



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