2009-06-04 8 views
2

JavaアプリケーションからPostgresqlデータベースにテキストを挿入していますが、文字列に 'char'が見つかるとすべてがクラッシュします。私はreplaceAll( "'"、 "\\'")を使って試しました。より多くの\ charsを持つそれの異なった変種さえ、まだそれはエスケープ記号のない文字列に 'を入れます。JavaからPostgresqlへの一重引用符を使用した文字列の挿入

文字列の '\で置換する方法はありますか?あるいは、文字列にPostgreSQLに一重引用符を入れる別の方法はありますか?

+0

私も同様の問題があります。私は休止状態のクエリを使用しています。フィールドに単一引用符が含まれていると例外がスローされた場合に挿入しようとします。 –

答えて

15

foo'bar文字列を検索ますを使用している場合は手動でこれを行うことについて心配する必要はありません10正しく。

+1

+1。それらは本当にこれを行う適切な方法です。 – Joey

+1

私からの準備済みの文も+1。 SQLインジェクション攻撃に身をさらすことに注意してください。 –

+2

ありがとう、私はあなたの助言に従って、それを適切な準備声明に変更しました、私はそれを間違った方法で使用していました。これも問題を解決しました。 – Malthan

2

ほとんどのSQL実装では、単一引用符をエスケープするために ''(2つの単一引用符)が使用されます。

例:

SELECT * FROM users WHERE f_name='foo''bar'; 

それとも、二重のドル記号を使用することができます。

例:

SELECT * FROM users WHERE f_name=$$foo''bar$$; 

どちらのステートメントはあなたがshouldn

+0

はい、これは標準SQLの機能で、PostgreSQLではこれをサポートしています。 http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS –

+2

でも、依然としてバインド変数とプリペアドステートメントを使用します。 – Thilo

+0

ありがとう、それは完璧に働いた。 – Malthan

関連する問題