所以在我正在编写的这个程序中,我实际上使用表单从用户那里获取了一个 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
要这样做?