[PHP-users 29442] Re: PDO_PGSQLでのbindParamの挙動について

KenjiMATSUO ml.kmatsuo @ gmail.com
2006年 6月 20日 (火) 02:44:58 JST


ハタさん、回答ありがとうございます。

先のメールには書いていませんでしたが、確かにこちらの環境でも同じ方法
で正常に動作します。説明不足おわびします。

ただ、どうにも気持ち悪くて納得いかないもので質問させてもらった次第です。

どちらも正常に動作する事が確認できた状態で、どちらで実装するか選択した
いというのが正直なところです・・・

Yusuke Hata wrote:
> ハタです。
> 
> KenjiMATSUO <ml.kmatsuo @ gmail.com> wrote:
> 
> 
>>【内容】
>>SQLの中に日本語が入っている、かつbindParamを利用している場合に
>>DBから値を正常に取得出来ない。
>>
>>例えば
>>$sql = "select case when id=1 then 'Value1' else 'Value2' end from test
>>where id= :id";
>>は正常に動作しますが、
>>
>>$sql = "select case when id=1 then '値1' else '値2' end from test
>>where id= :id";
>>はエラーにはなりませんが、値は取得できていません。
>>
>>また
> 
> 
> あまり根本的解決にはなっていないですが、日本語を含むクエリを投げれないだけ
> という理由ならば、日本語もプレースホルダに入れてしまうのはいかがでしょうか?
> 
> $stmt = $pdo->prepare("select case when id = 1 then :hoge else :foo end from cd where id = :id");
> $stmt->bindParam(":hoge", $hoge);
> $stmt->bindParam(":foo", $foo);
> $stmt->bindParam(":id", $id);
> 
> $hoge = "ほげほげほげ";
> $foo = "ふうふうふう";
> $id = 1;
> 
> $stmt->execute();
> var_dump($stmt->fetch(PDO::FETCH_ASSOC));
> 
> $hoge = "ほげほげ";
> $foo = "ふうううう";
> $id = 2;
> $stmt->execute();
> var_dump($stmt->fetch(PDO::FETCH_ASSOC));
> 
> 
>>>>結果
> 
> 
> array(1) {
>   ["case"]=>
>   string(18) "ほげほげほげ"
> }
> array(1) {
>   ["case"]=>
>   string(15) "ふうううう"
> }
> 
> 環境は同じくPostgreSQL8.1,PHP,PDOも同様です。
> これではダメでしょうか ^^;
> 



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