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

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


大垣です。

エスケープ処理の話ついでにプリペアードクエリでエスケープ処理が必須な
ケースをもうひとつ紹介します。

PostgreSQLはバイナリ型のフィールドをサポートしていますが、バイナリ型
がある場合はプリペアードクエリ型のAPIを利用していてもpg_escape_bytea()
でエスケープ処理しないと正しく処理できません。

これは仕様です :)

--
Yasuo Ohgaki
yohgaki @ ohgaki.net


2012年11月12日 15:18 Yasuo Ohgaki <yohgaki @ ohgaki.net>:
> 大垣です。
>
> 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 メーリングリストの案内