ikepyonのだめ人間日記

セキュリティに関することを書いていく予定。

MySQLのPreparedStatement

MySQL4.1以降でないとサーバーサイドPreparedStatementはサポートされていないようだ。
http://dev.mysql.com/tech-resources/articles/4.1/prepared-statements.html
http://dev.mysql.com/doc/refman/5.1/ja/connector-j-reference-implementation-notes.html
従って、昨日書いたようなコードになっている模様。

PreparedStatement

PreparedStatements は、MySQL がプリペアド ステートメント機能を持たないため、ドライバによって実装されます。これにより、ドライバがクライアントの完全な SQL のパーサを持つことが要求されるため、ドライバは getParameterMetaData() または getMetaData() を実装しません。

MySQL Connector/J 3.1.0 からは、サーバ側プリペアド ステートメントおよびバイナリ エンコードされた結果セットは、サーバがそれらをサポートする場合に使用されます。

http://dev.mysql.com/doc/refman/5.1/ja/connector-j-reference-implementation-notes.html

となっているので、サーバーサイドPreparedStatementが使える場合には使うはずなんだけど、徳丸さんの検証からは使ってないように見えるなぁ。
昨日見つけたコードはMySQL Connector/J 5.1 なんだけど・・・

(追記)
5.1ではデフォルトではサーバーサイドPreparedStatementを使用しないようになっているらしい。
http://dev.mysql.com/doc/refman/5.1/en/cj-news-5-1-0.html
http://www.geminium.com/chiba_blog/2008/12/23/33/
というわけで、一安心?