備忘録的にアップします。
かなり昔に作られたシステムのメンテで学んだこと
pg_queryを使用してSQLを処理していましたが、自前のエスケープが効いてなくてエラーが発生していました。
addslashesで処理をしていましたが・・・
Googleティーチャーに聞いてみると記事を発見
standard_conforming_strings がOnの場合はエスケープが文字として認識される。
\nと改行コードがバックスラッシュとnの2文字と認識されるようです。
PostgreSQL9.1以降はこの値のデフォルトがOnということ
それで自前でエスケープしてもエラーになったと。
standard_conforming_stringsの説明
pg_queryを使っていたのをpg_query_paramsに変更することで関数でエスケープしてくれるので、これで回避!
エスケープがバックスラッシュではなくなったってことですね。
参考:徳丸浩の日記