0

これまで、HTML フォームからの入力を処理するときに、準備済みステートメントを real_escape_string と共に使用してきました。例:

$var1 = $dbconnection->real_escape_string($_POST['varFromForm']); 

if ($insert = $dbconnection->prepare("INSERT etc.. ")) {
    $insert->bind_param('s', $var1);
    and so on..

ただし、これにより、入力のテキストエリアで改行が使用されたときに \r\n を出力して、保存されたデータを表示するときに書式設定が台無しになりました。これは、明らかに入力を 2 回エスケープしたためです。

だから私は準備されたステートメントとの取り引きを誤解していないこと、そしてこの次のコードがエスケープなしで準備されたステートメントを使用することによってSQLインジェクションから安全であることを確認したいですか?

$var1 = $_POST['varFromForm'];

if ($insert = $dbconnection->prepare("INSERT etc.. ")) {
    $insert->bind_param('s', $var1);
    and so on..
4

1 に答える 1

1

準備されたステートメントの sql クエリ実行プランは、パラメーターによって変更することはできません。パラメーターのみを挿入できます。したがって、変数をエスケープする必要はありません。

于 2013-02-06T19:46:47.387 に答える