0

誰かがまたはをコメント フィールドで使用しているときmysql_real_escape_string()に、データベースに変数を挿入せずに変数を挿入する方法についてジレンマがあります。\n, \r, \x00" '<br>preg_replacemysql_real_escape_string

4

2 に答える 2

3

mysql_real_escape_stringクエリが壊れないように値をエスケープするだけで、正しく使用すれば SQL インジェクションから保護します。

特定の文字が必要ない場合は、適用する前に追加の関数を使用してそれらを削除する必要がありますmysql_real_escape_string

[必須の「準備されたステートメントを使用する」コメントを挿入]

元:

$string = "My name is
John";

$filtered_string = str_replace("\n", " ", $string); // filter
$escaped = mysql_real_escape_string($filtered_string); // sql escape
mysql_query("INSERT INTO `messages` SET `message` = '" . $escaped . "'");
于 2013-01-11T17:34:59.337 に答える
2

これを支援するために str_replace を使用できるはずです。

mysql_real_escape_string(str_replace(array("\n", "\r\n", "\x00", '"', '\''), '', $input));

そうは言っても、データベースの読み取り/書き込み用に mysqli または PDO に切り替えることをお勧めします。これらはどちらも準備済みステートメントを許可するため、SQL インジェクションのリスクが軽減されます。

PDO の例を次に示します。

$stmt = $PDOConnection->prepare('INSERT INTO example_table (input_field) VALUES (:input_field)');
$stmt->bindParam(':input_field', $input);
$stmt->execute();
于 2013-01-11T17:41:14.783 に答える