iakioの日記 RSSフィード

2008-06-27

PostgreSQLでの複文の制限

| 21:16 | PostgreSQLでの複文の制限 - iakioの日記 を含むブックマーク はてなブックマーク - PostgreSQLでの複文の制限 - iakioの日記

PostgreSQLでは、複文が利用可能かどうかはAPIによって(というかプロトコルによって)決まります。拡張問い合わせでは複文を使うことはできません。

PQexecと異なり、PQexecParamsは、文字列内に最大でも1つのSQLコマンドを入れることができます。 (セミコロンを入れることはできますが、空でないコマンドを1つ以上入れることはできません。) これは、プロトコル自体の制限ですが、SQL混入攻撃に対する追加の防御となる点より多少役に立ちます。

コマンド実行関数

すべてのケースを試してみたわけではないのですが、Javaで「更新系のSQLであれば複文に対応」となっているのは、Statement.executeUpdate()を使っているからで、PreparedStatement.executeUpdate()であれば実行できないのではないかと思います。

PHPだとこんな感じ

<?php
$con = pg_connect("");
$res = pg_query($con, "update tbl1 set t = '';update tbl1 set t = ''");

$res = pg_prepare($con, "", "update tbl1 set t = '';update tbl1 set t = ''");
$res = pg_execute($con, "", array());

実行

$ php test.php
PHP Warning:  pg_prepare(): Query failed: ERROR:  cannot insert multiple commands into a prepared statement in /home/iakio/test.php on line 5
PHP Warning:  pg_execute(): Query failed: ERROR:  unnamed prepared statement does not exist in /home/iakio/test.php on line 6

zsxxftclzsxxftcl2011/04/24 17:44cjchQp , [url=http://hjanipamgmnh.com/]hjanipamgmnh[/url], [link=http://ehhnmcxrnvtm.com/]ehhnmcxrnvtm[/link], http://tbmxkfsxlfwi.com/

TienTien2013/04/05 18:08I atcually found this more entertaining than James Joyce.

czbdxfczbdxf2013/04/07 06:103eG4ap <a href="http://cabwpqiayfyh.com/">cabwpqiayfyh</a>

トラックバック - http://postgresql.g.hatena.ne.jp/iakio/20080627