[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 メーリングリストの案内