一尘不染

如何在PHP中使用mysql_real_escape_string函数

mysql

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


阅读 294

收藏
2020-05-17

共1个答案

一尘不染

将其用于查询中的实际值,而不是整个查询字符串本身。

例:

$username = mysql_real_escape_string($_POST['username']);
$query = "update table set username='$username' ...";
$rs = mysql_query($query);
2020-05-17