CodeIgniter2.0.3 postgresqlのエスケープ処理(like検索)にバグ

CodeIgniter2.0.3 postgresqlのエスケープ処理(like検索)にバグ

現象

Active Recordの$this->db->like();を使用したときに、
「%(パーセント)」「_(アンダースコア)」が2重にエスケープされる。


エスケープ文字が「!」の場合、

test_test

↓こうなる

test!!_test
ソースを確認

system/database/drivers/postgre/postgre_driver.php
の299行目

<?php
$str = str_replace(array('%', '_', $this->_like_escape_chr),
                   array($this->_like_escape_chr.'%', $this->_like_escape_chr.'_', $this->_like_escape_chr.$this->_like_escape_chr),
                   $str);
?>

str_replaceは引数が配列の場合、左から順に処理していくので
この順番だとエスケープ文字($this->_like_escape_chr)が2個付く。



エスケープ文字を最初に置換するように修正。

<?php
$str = str_replace(array($this->_like_escape_chr, '%', '_'),
                   array($this->_like_escape_chr.$this->_like_escape_chr, $this->_like_escape_chr.'%', $this->_like_escape_chr.'_'),
                   $str);
?>