Pages

2009年10月5日月曜日

PHP MDB2のprepareでLIKEを使用する方法

MDB2のprepareでLIKEを使用する場合には、executeでのquoteだけではワイルドカードである_、%などをエスケープしなければならないので、不十分である。
そこでescapeというものを通常利用するのだけど、これまたダメ。

$mdb2->esacape() だと\\%となってしまうので、その後のexecuteでのquoteで更にエスケープされて\\\\% となってしまう。。。

そこでmdb2にはescapeではなくて escapePatternというものが用意されているのでこれを利用する。

$sql = " SELECT * FROM hogetable WHERE testcode LIKE :testcode ";
$types = array("text");
$data = array('testcode' => '%' . $mdb2->escapePattern($_GET['testcode'], true) . '%');



$sth = $this->_db->prepare($db['sql'], $sql['types'], MDB2_PREPARE_RESULT);
if ( PEAR::isError($sth) )
    throw new Exception('FILE:' . __FILE__ . ' LINE:' . __LINE__ . ' MESSAGE:' . $sth->getMessage());

$result = $sth->execute($sql['data']);
if ( PEAR::isError($result) )
    throw new Exception('FILE:' . __FILE__ . ' LINE:' . __LINE__ . ' MESSAGE:' . $result->getMessage());


var_dump($result->fetchAll());



こんな感じですね。

2 件のコメント:

  1. 参考にさせていただきました!
    ありがとうございます。

    返信削除
  2. 参考にさせていただきました!
    ありがとうございます。

    返信削除

Followers