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 回答