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);
?>
  • このエントリーをはてなブックマークに追加

コメントをどうぞ

メールアドレスが公開されることはありません。