[PHP-users 29441] Re: PDO_PGSQLでのbindParamの挙動について
Yusuke Hata
nowel @ xole.net
2006年 6月 19日 (月) 22:12:02 JST
ハタです。
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も同様です。
これではダメでしょうか ^^;
--
Yusuke Hata <nowel @ xole.net>
blog: http://blog.xole.net/
PHP-users メーリングリストの案内