2

パラメータ化されたクエリの使用方法をまだ学んでおらず (このサイトの他の投稿によると、これは明日の朝一番にやらなければならないことです)、フォーム データをエスケープしてクエリに入れたいと思っています。

二度、私はこの解決策に出くわしました:

$_POST = array_map('mysqli_real_escape_string', $_POST);

これは、私が知る限り、 $_POST 配列内のすべての変数をエスケープ関数を介して実行します。私はその正確な行が賛成票を投じているのを見てきましたが、それを既存の PHP に追加すると、一連の空白の値が作成されます。

mysqli_real_escape_string には 2 番目のパラメーターであるリンク/接続が必要であるという印象を受けました。これが私の問題の原因ですか?その行が削除され、変数が $_POST からエスケープされていない値を取得する場合、データはデータベースで問題なく取得されます。

4

3 に答える 3

3

array_map新しい配列を返します。上書きしている場合は$_POST、より良い解決策は を使用することarray_walkです。

array_walk($_POST, function(&$string) use ($link) { 
  $string = mysqli_real_escape_string($link, $string);
});

$link有効な接続でなければならないことに注意してください。

Function [ <internal:mysqli> function mysqli_real_escape_string ] {

  - Parameters [2] {
    Parameter #0 [ <required> $link ]
    Parameter #1 [ <required> $string_to_escape ]
  }
}
于 2013-09-05T00:30:34.473 に答える
2

エスケープされた値を別の変数に渡す必要があります。

$post = array_map('mysqli_real_escape_string', $_POST);

または:

foreach($_POST as $k => $v) {
    $_POST[$k] = mysqli_real_escape_string($v);
}

注: 配列が参照されていない限り、foreach は配列自体ではなく、指定された配列のコピーに対して動作します。

于 2013-09-05T00:13:30.260 に答える
0

はい、これがあなたの答えです:

mysql_real_escape_string()データベースの文字セットを使用してエスケープする必要があるものを決定するため、データベースへの接続が必要です。
これがないと、PHP はどの文字セットを使用しているのか、何をエスケープすればよいのかわかりません。

多くあります:
http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html
そして、すべて異なる文字で。

于 2013-09-05T00:15:39.087 に答える