0

質問、変数をmysql_real_escape_stringした場合でも、SELECTSQLクエリでどのように機能するのでしょうか。例えば:

私の行には、値を保持する列があります's-Gravenmoer。ここで、ユーザーが入力する's-Gravenmoerと、安全のためにこの入力された値をエスケープします。ただし、値を保持する列のある行は's-Gravenmoerポップアップ表示されないため、一重引用符の前にスラッシュが追加されます。mysql_real_escape_stringでこれを行う方法がある場合は?

みんなありがとう!サンダー

4

1 に答える 1

6

SQLを使用するためにデータをエスケープするポイントを誤解しています。データを永続的に変更するわけではありません。贈り物の周りに紙を巻くものと考えてください。あなたはデータベースにいくつかのデータをプレゼントしているので、それをうまくまとめます(real_escape_string)。データベースに到達すると、DBサーバーはギフトのラップを解除し(エスケープを削除)、「ギフト」を隠し場所に置きます。

追加したバックスラッシュは、実際の挿入を行うときにDBサーバーによって削除されるため、保存されたデータに表示されることはありません。エスケープは、クエリに挿入したデータがSQLステートメントを「壊さない」ようにするためだけにあります。

$name = "Miles O'Brien"; // <---note the '
$sql = "INSERT INTO people (names) VALUES ('$name')";

結果のSQL:

INSERT INTO people (names) VALUES ('Miles O'Brien')
                                           ^--- oops, string terminated earlier, what's this "Brien" field/keyword?

real_escape_stringを使用すると、クエリは次のようになります。

... VALUES ('Miles O\'Brien')
                    ^^---no longer an SQL string delimiter, treat it like any other char now.
于 2012-10-16T20:56:13.277 に答える