mysqli->real_escape_string を使用して "who's" などの文字列値をデータベースに追加すると、引用符をまったく変更せずに文字列が追加されます。データベースを確認すると、その中の値は「who's」です。
mysqli->real_escape_string を使用せず、"who's" のような一重引用符で文字列を追加すると、データベースに追加されません。どこにもありません。
これは普通じゃないですよね?
mysqli->real_escape_string を使用して "who's" などの文字列値をデータベースに追加すると、引用符をまったく変更せずに文字列が追加されます。データベースを確認すると、その中の値は「who's」です。
mysqli->real_escape_string を使用せず、"who's" のような一重引用符で文字列を追加すると、データベースに追加されません。どこにもありません。
これは普通じゃないですよね?
はい、そうです。それよりも詳細な方法でこの質問に答えるのは少し難しいです。
real_escape_string()
クエリで安全に使用できるようにデータをエスケープするだけで、データを変更することはありません。エスケープしないと、クエリに構文エラーがあるため失敗し、データは挿入されません。
ただし、データをエスケープする最も安全な方法は、準備済みステートメントを使用することです。
つまり、データベースにこれらを追加するときにのみ、real_escape_string
必要な文字をエスケープします。つまり、PHP の文字列で同じタイプの引用符をエスケープするようなものです。たとえば、次のようになります。
$str = 'We escape single quotes like in O\'Connor';
また、一重引用符 (アポストロフィ) はコードの破損を防ぐためのものですが、文字列値には実際には含まれていません。同様に…</p>
INSERT INTO table (`name`) VALUES ('O\'Connor')
この例では、バックスラッシュは行に挿入されません。もちろん、これはセキュリティ上の理由によるものです。Hackipedia のページをチェックして、考えられるケースを確認してください。
これがあなたが求めていたものであることを願っています。
それは正常であり、正しいです。これreal_escape_string
により、文字列をデータベースに追加できます (引用符を含む)。これがないと、アポストロフィが SQL に干渉し、エラーがスローされる可能性が高くなります。そのため、「どこにも見つからない」のです。