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); ?>