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());
こんな感じですね。
参考にさせていただきました!
返信削除ありがとうございます。
参考にさせていただきました!
返信削除ありがとうございます。