PostgreSQLのエスケープ事情

備忘録的にアップします。

かなり昔に作られたシステムのメンテで学んだこと
pg_queryを使用してSQLを処理していましたが、自前のエスケープが効いてなくてエラーが発生していました。

addslashesで処理をしていましたが・・・

Googleティーチャーに聞いてみると記事を発見

standard_conforming_strings がOnの場合はエスケープが文字として認識される。
\nと改行コードがバックスラッシュとnの2文字と認識されるようです。

PostgreSQL9.1以降はこの値のデフォルトがOnということ
それで自前でエスケープしてもエラーになったと。

standard_conforming_stringsの説明

pg_queryを使っていたのをpg_query_paramsに変更することで関数でエスケープしてくれるので、これで回避!

pg_query_params

エスケープがバックスラッシュではなくなったってことですね。

参考:徳丸浩の日記

PHPのエラーを表示する

PHPでエラーが表示されずに困っていてその調整で初めて知ったこと。

PHPのエラー表示には「display_errors」を使います。
これがOffになっているとエラーが表示されません。

今回これがOnになっているのにエラーが表示されないのです。
PHPのバージョンは5.6.x

htaccessを見てみると下記の通り

お判りいただけただろうか…

正解は下記です。

なんと!htaccessで記述する場合はE_ALLのような定数を使ってはいけないのです。
数値で記述するとちゃんと認識されます!

各定数の数値はこちらで調べてください。

あー 知らなかった~
勉強なりました。