2011-01-21 17 views
0
$url = "What's up with "You doing this""; 
$q = sprintf ("update user set url='%s'",$url); 
pg_query ($db_conn, $q) 

私は、データベースにユーザーが望むとおりにすべてを挿入したいと考えています。私は何かを脱出したくない。引用のせいで上記のことは私のために失敗するでしょう。一重引用符は、postgresql文字列(url = '%s')の周りを移動する必要があります知っている。私のURL文字列に二重引用符があるので、クエリはそのために更新されません。私はすべての二重引用符に対して文字列置換を行い、それらを一重引用符にすることができると確信していますが、実際に二重引用符が必要な場合はどうなりますか?また、postgresqlドキュメントによれば、スラッシュはすぐに廃止される予定であるため(http://www.postgresql.org/docs/8.1/interactive/sql-syntax.html)、挿入に反対するため、文字列置換を使用してバックスラッシュを挿入することはできませんユーザーが入力したもののみ。postgresql引用符の問題

私は何を提案していますか?あなたの文字列に引用符をエスケープする

pg_query_params 
     (
     $db_conn, 
     "UPDATE user SET url = $1", 
     array('What's up with "You doing this"') 
     ); 

答えて

1

使用すると、クエリをパラメータ化。

+0

私はまだsprintfを使用するというアイデアが好きです。それはまだ可能ですか? – keith

+0

@keith:そうです。入力文字列の一重引用符を二重引用符に変更するだけです。あなたの例ではあなたは何も持っていないので、そのまま文字列を残すことができます。なぜあなたはパラメータを使用したくないのか分かりませんが、もちろんあなた次第です。 – Quassnoi

+0

'what's' - >' what'''の一重引用符をエスケープする必要があります – Toto

0
この

$のURL =あなたは " "この\をやって" 何\ 'sの\とアップ" などのテキストであなたの二重引用符をエスケープ