[PHP-users 35750] Re: PostgreSQL配列型カラムへのプリペアドステートメント実行

Yasuo Ohgaki yohgaki @ ohgaki.net
2012年 11月 12日 (月) 15:18:19 JST


大垣です。

pg_array_to_string()という関数を作ろうか、と思った事もあるのですが
配列データは文字列データとは限らず、デフォルトのデータ型だけでも
正しく処理するには

pg_secape_string と pg_escape_bytea

を使い分けないとならないので作っていません。データ型を指定するAPI
にする事も可能ですが煩雑になるので、ユーザが必要な処理をスクリプト
で実装する方が良いと思っています。

全て文字列データとしてエスケープ処理します、それ以外のケースは自分
でエスケープ処理してください、というAPIもありとは思いますが、色々
な意味で微妙かなと思っています。

--
Yasuo Ohgaki
yohgaki @ ohgaki.net


2012年11月7日 15:56 おさ <osa @ osa-p.net>:
> ありがとうございます。
>
> やっぱり自前で変換してやらないといけないんですね。
> 配列の要素をクォーテーションで括って、カンマ区切り波括弧括りにして、
> 無事投入できました。
> まだエスケープ処理からは逃れられないのですね。
>
>
> 2012年11月7日 15:25 Kiyotaka sumii <quatrecentsept @ tsunukoraf.net>:
>> こんにちは
>>
>> この場合、execute時に$2に代入する値を、phpの配列ではなく、
>> postgresqlが理解できる配列の型にしてあげる必要があります。
>>
>> 具体的には array("abc","def") のところが、
>> {abc,def}
>> という文字列になります。
>>
>> ex.
>> $pg_array = "{abc,def}";
>> pg_execute($dbconn, $stmtname, array(1,$pg_array));
>>
>>
>> On 2012/11/07, at 14:09, おさ <osa @ osa-p.net> wrote:
>>
>>> こんにちは、おさです。
>>>
>>> PostgreSQLの配列型カラムへデータを投入したいのですが、
>>> エラーになってしまい困っています。
>>>
>>> id bigint
>>> data text[]
>>> というカラム定義のテーブルがあり
>>> insert into tbl (id,data)values($1,$2)
>>> というプリペアドステートメントを定義しました。
>>>
>>> そこで
>>> pg_execute($dbconn, $stmtname, array(1, array("abc","def")))
>>> を実行したのですが、PostgreSQL側で
>>> ERROR:  配列値は"["か次元情報から始まらなければなりません
>>> というエラーが出ます。
>>> pg_executeに直接配列は渡せないのでしょうか?
>>> なにか正しいやり方があるのが、自前でなんとしないといけないのでしょうか?
>>>
>>> 環境はPHP5.4.8、PostgreSQL9.2.1です。
>>>
>>> --
>>> +-----------------------------------------------------------------------+
>>> HANDLE:おさ
>>> EMAIL :osa @ osa-p.net twitter:osapon URL:http://www.osa-p.net/
>>> +-----------------------------------------------------------------------+
>>> _______________________________________________
>>> PHP-users mailing list  PHP-users @ php.gr.jp
>>> http://ml.php.gr.jp/mailman/listinfo/php-users
>>> PHP初心者のためのページ - 質問する前にはこちらをお読みください
>>> http://oldwww.php.gr.jp/php/novice.php3
>>
>> _______________________________________________
>> PHP-users mailing list  PHP-users @ php.gr.jp
>> http://ml.php.gr.jp/mailman/listinfo/php-users
>> PHP初心者のためのページ - 質問する前にはこちらをお読みください
>> http://oldwww.php.gr.jp/php/novice.php3
>
>
>
> --
> +-----------------------------------------------------------------------+
>  HANDLE:おさ
>  EMAIL :osa @ osa-p.net twitter:osapon URL:http://www.osa-p.net/
> +-----------------------------------------------------------------------+
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3


PHP-users メーリングリストの案内