在我编写的程序中,我通过表单获取用户提供的SQL查询。然后我会在我的数据库上运行该查询。
我知道不能“信任”用户输入,因此我想对输入进行消毒处理。我试图使用mysql_real_escape_string
,但一直无法使其正常工作。
这是我尝试的内容,给定输入为:select * from Actor;
//"query" is the input string:
$clean_string = mysql_real_escape_string($query, $db_connection);
$rs = mysql_query($clean_string, $db_connection);
if (!$rs)
{
echo "Invalid input!";
}
这总是给我
"无效的输入!"
错误。
当我去掉 clean_string
部分,只运行 mysql_query
在查询上时,不会输出
"无效的输入"
消息。相反,当我这样做:
$rs = mysql_query($query, $db_connection);
if (!$rs)
{
echo "Invalid input!";
}
它不会输出
"无效的输入"。
然而,我需要使用mysql_real_escape_string
函数。我做错了什么?
更新:
给定select * from Actor;
作为输入,我发现以下内容。
使用echo语句,我发现在进行净化之前,字符串保留了正确的值:select * from Actor;
。然而,在净化之后,它保留了错误的值select *\r\nfrom Actor;
,因此出现了错误消息。为什么mysql_real_escape_string
会这样做?