質問

どうしてそうなっちゃうんですかいいのかと思うので違いまmysql_real_escapeデータ以上は一回しか出来ないのですか?

ないエスケープされたデータに対して、自分のサイトを再度別のコードです。この調子ですか?または間関係についての理解を得ます。

役に立ちましたか?

解決

はい。あなたは余分な不要なバックスラッシュを取得したい。

他のヒント

右の場mysql_real_escapeは 右前 送信するクエリをつけ、保存してください。毎その他のインスタンスではスクリプトの主要な設計の欠陥.

う好ましくは、自分のdbクラスのコースです。

はい、それは問題になるでしょう。

たとえば、


のA のは、「Joeの家」であれば、最初の呼び出しは、「ジョー\「sの家」を2つ目は、「ジョー\\\生成します」を生成するデータベース内のバックスラッシュを保存し、家を」。

これは、Webサーバーは、マジッククオートを有効にしているとあなたは、クライアントからの入力にmysql_real_escape_stringの使用時に生じる問題と類似しています。これをすることによって解決されます:

if (! get_magic_quotes_gpc()) {
    $value = mysql_real_escape_string($_GET["value"]);
} else {
    $value = mysql_real_escape_string(stripslashes($_GET["value"])); 
}

(後者例えば参照 http://www.php.net/get_magic_quotes_gpcする

[私は以下のコメントで修正を反映するための答えを編集しました]
もちろん、データはダブルエスケープだろう。

あなたは持っている、パラメータ化クエリを経由して mysqliののすべてでmysql_real_escape()を使うべきではありません周囲に十分な長さを貼り付けられます。

はい、それは過脱進問題になります。これは関係なく、まさにそれが何をするかの、いずれかのエスケープでも同じです。たとえば、あなたが一般的なルール次の文字列で二重引用符をエスケープしたい場合:

bla "foo"

1つのエスケープがなった後、

bla \"foo\"

2がなった後、

bla \\\"foo\\\"

と上のようにします。 「unescapements」の数は正確に「脱進」の数と一致する必要があります。あなたは、単純なアポストロフィが出力に\'になりそうという、テキストフィールドに一部の文字をオーバー逃れることをいくつかのサイトでこの問題の兆候を見ることができます。

エスケープされた文字列のように見えるものは、エスケープ文字列を意図していたので、

エスケープとエスケープ文字列を区別することはできません。そのため、再び脱出しようとすると、エスケープをエスケープだろう - 。とエスケープワンステキストは、MySQLが読み込ま何になります。

そのため、あなたは何度も逃れることはありません。

あなたはすべてでエスケープする必要がないので、よりよい解決策は、paramterizedクエリを使用することです。

はい、それは違います:

$string = "I'm Chuck!";
mysql_escape_string($string); // I\'m Chuck!
mysql_escape_string(mysql_escape_string($string)); // "I\\\'m Chuck!
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top