misc.log

日常茶飯事とお仕事と

CodeIgniterのDB処理でLike検索を行った場合のバグ?

※CodeIgniter 2.1.4での話です(←今現場で使っているのがこれなので…)

PHPの開発フレームワークであるCodeIgniterで、Like文を使った検索処理を行った際に内部で生成されるSQLがおかしくなるケースがあることがわかりました。とりあえず忘れないようにメモ。現象等は下記の通り。

  • Like検索条件にアンダースコアやパーセンテージの文字が入った場合に予約語、予約文字と混ざらないようにエスケープする処理が入る。
  • エスケープには「!」をつけるようだが、その処理に不備があり、エスケープ記号の「!」が「!!」になってしまう。
  • 本現象はPostgreSQL用のドライバー「postgre_driver.php」で発生。

本件について、MySQLでも同じような問題が報告されてこちらは訂正されている様子。

github.com

PostgreSQLについてはほかのブログ等でもだいぶ前に報告されていますが、今使っているCodeIgniterのバージョン*1でも訂正されていない様子。

taramonera.hatenadiary.jp

ただのメモ/codeigniterでpostgresqlのlike検索にバグがある件
http://memo-ing.blogspot.jp/2011/06/codeigniterpostgresqllike.html


すんません、じっさいに手を動かしているわけではないので正直PHPよくわかってなくてこれ以上突っ込めません(笑)。

*1:CodeIgniterのバージョン: 2.1.4