mysql_real_escape_string()允许'和'

时间:2011-07-30 15:53:32

标签: php mysql database

我正在提出一个新问题,因为另一个问题是不活跃的,并且已经发生了很大变化。我的db代码是这样的:

$sql2="INSERT INTO $tbl_name(s_id, s_name, s_email, s_content)VALUES('$id', '$s_name', '$s_email', '$s_content')";
$result2=mysql_query($sql2);

if($result2){
echo "Successful<BR>";

}
else {
echo "ERROR";
}

我可以输入字母数字,但不能输入'或' - 我如何使用mysql_real_escape_string()来解决这个问题?谢谢。

3 个答案:

答案 0 :(得分:6)

在将字符串注入SQL查询之前,只需使用mysql_real_escape_string()来转义字符串。

例如:

$s_name_escaped = mysql_real_escape_string($s_name);
$s_email_escaped = mysql_real_escape_string($s_email);
$s_content_escaped = mysql_real_escape_string($s_content);

$sql2="INSERT INTO $tbl_name(s_id, s_name, s_email, s_content)
       VALUES('$id', '$s_name_escaped', '$s_email_escaped', '$s_content_escaped')";


或者,甚至可能更好:停止使用旧的mysql_*函数,并使用mysqli_*PDO和Prepared语句。

答案 1 :(得分:0)

mysql_real_escape_string()不会阻止您使用可能促进SQL注入的“或”之类的字符。它只是转义这些字符,因此MySQL将它们解释为文字值而不是查询中的命令。 你回答的是,只需使用它。你不需要做任何其他事情。

答案 2 :(得分:0)

您应该使用mysql_real_escape_string

在查询内部或外部转义字符串变量
$name    = mysql_real_escape_string($s_name);
$email   = mysql_real_escape_string($s_email);
$content = mysql_real_escape_string($s_content);

$sql2 = "INSERT INTO $tbl_name(`s_id`, `s_name`, `s_email`, `s_content`) \n";
$sql2.= "VALUES('$id', '$name', '$email', '$content')";