3

mysqli->real_escape_string を使用して "who's" などの文字列値をデータベースに追加すると、引用符をまったく変更せずに文字列が追加されます。データベースを確認すると、その中の値は「who's」です。

mysqli->real_escape_string を使用せず、"who's" のような一重引用符で文字列を追加すると、データベースに追加されません。どこにもありません。

これは普通じゃないですよね?

4

3 に答える 3

2

はい、そうです。それよりも詳細な方法でこの質問に答えるのは少し難しいです。

real_escape_string()クエリで安全に使用できるようにデータをエスケープするだけで、データを変更することはありません。エスケープしないと、クエリに構文エラーがあるため失敗し、データは挿入されません。

ただし、データをエスケープする最も安全な方法は、準備済みステートメントを使用することです。

于 2012-07-11T23:50:47.337 に答える
1

つまり、データベースにこれらを追加するときにのみ、real_escape_string必要な文字をエスケープします。つまり、PHP の文字列で同じタイプの引用符をエスケープするようなものです。たとえば、次のようになります。

$str = 'We escape single quotes like in O\'Connor';

また、一重引用符 (アポストロフィ) はコードの破損を防ぐためのものですが、文字列値には実際には含まれていません。同様に…</p>

INSERT INTO table (`name`) VALUES ('O\'Connor')

この例では、バックスラッシュは行に挿入されません。もちろん、これはセキュリティ上の理由によるものです。Hackipedia のページをチェックして、考えられるケースを確認してください。

これがあなたが求めていたものであることを願っています。

于 2012-07-12T00:31:07.953 に答える
1

それは正常であり、正しいです。これreal_escape_stringにより、文字列をデータベースに追加できます (引用符を含む)。これがないと、アポストロフィが SQL に干渉し、エラーがスローされる可能性が高くなります。そのため、「どこにも見つからない」のです。

于 2012-07-11T23:53:08.700 に答える