2013-01-11 58 views
0

我有一个难题,我应该怎么mysql_real_escape_string()我的变量,而无需将它们插入到\n, \r, \x00当有人对我的评论字段使用" '<br>,我preg_replace,而不是试图mysql_real_escape_string的数据库,但似乎我不知道到底如何让我想要的所有字符和符号。SQL注入mysql_real_escape_string

+1

咦?你想做什么? – SLaks

回答

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(); 
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 . "'"); 
+0

“[插入强制性”使用准备好的语句“注释”) –