standard_conforming_strings = on


最初は接続しない。
<?php
        $a="\\'";
        //$conn=pg_connect("host=localhost dbname=test user=nobody password=nobody");
        echo $a," ",pg_escape_string($a);
        //pg_close($conn);
?>
結果は
\' \\''

次。接続する。
<?php
        $a="\\'";
        $conn=pg_connect("host=localhost dbname=test user=nobody password=nobody");
        echo $a," ",pg_escape_string($a);
        pg_close($conn);
?>
結果は
\' \''

で、面白いのが次。そのままコメントアウトを戻す。
<?php
        $a="\\'";
        //$conn=pg_connect("host=localhost dbname=test user=nobody password=nobody");
        echo $a," ",pg_escape_string($a);
        //pg_close($conn);
?>
結果は?
\' \''

apacheを再起動すると
\' \\''
に戻る。

phpのpg_escape_stringが接続ステータスのキャッシュを持つような動作。
なので、pg_connect()する前にpg_escape_string()をすると結果は不定、という結論。

キモイデスネー

pg_escape_string()がpg_connect()する前に動いてしまうという仕様がダメだと思う。
なので、pg_escape_string()は第二引数に変換したい文字列を入れ、第一引数にdbリソースを入れて呼ぶべきでしょう。
上記の例なら
$conn=pg_connect("host=localhost dbname=test user=nobody password=nobody");
echo $a," ",pg_escape_string($conn,$a);
ですね。
pg_escape_string()を直接呼ぶのではなく、間に何か関数を入れてdbリソース指定なしではエラー返すようにしちゃってもいいかも。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

Menu

ここは自由に編集できるエリアです。

管理人/副管理人のみ編集できます