※CodeIgniter 2.1.4での話です(←今現場で使っているのがこれなので…)
PHPの開発フレームワークであるCodeIgniterで、Like文を使った検索処理を行った際に内部で生成されるSQLがおかしくなるケースがあることがわかりました。とりあえず忘れないようにメモ。現象等は下記の通り。
- Like検索条件にアンダースコアやパーセンテージの文字が入った場合に予約語、予約文字と混ざらないようにエスケープする処理が入る。
- エスケープには「!」をつけるようだが、その処理に不備があり、エスケープ記号の「!」が「!!」になってしまう。
- 本現象はPostgreSQL用のドライバー「postgre_driver.php」で発生。
本件について、MySQLでも同じような問題が報告されてこちらは訂正されている様子。
PostgreSQLについてはほかのブログ等でもだいぶ前に報告されていますが、今使っているCodeIgniterのバージョン*1でも訂正されていない様子。
- ただのメモ/codeigniterでpostgresqlのlike検索にバグがある件
- http://memo-ing.blogspot.jp/2011/06/codeigniterpostgresqllike.html
すんません、じっさいに手を動かしているわけではないので正直PHPよくわかってなくてこれ以上突っ込めません(笑)。

PHP & PostgreSQLで作る実用Webシステム―便利な関数リファレンス付き
- 作者: 三木秀治
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2006/07
- メディア: 単行本
- クリック: 4回
- この商品を含むブログ (2件) を見る
*1:CodeIgniterのバージョン: 2.1.4