mysql_real_escape_string删除整个字符串

时间:2011-05-23 21:13:44

标签: php sql sql-injection

我正在为我的网站编写一个身份验证系统,我想确保我能够防止SQL注入。我正在使用'mysql_real_escape_string',但这会彻底清除字符串。用户名是'Damo'之类的东西,但在通过该功能后,它就消失了。

我做错了什么? (没有mysql_real_escape_string,它可以正常工作)

$user_name = $_POST["username"];
$md5 = md5($_POST["password"]);

$user_name = mysql_real_escape_string($user_name);


$login = $query->GetSingleQuery("--SINGLE","SELECT user_name, id FROM url_users WHERE user_name='".$user_name."' and user_password='".$md5."';",array("user_name","id"));

2 个答案:

答案 0 :(得分:7)

mysql_real_escape_string需要连接。假定连接已创建为同一库的一部分。

但是,mysql_real_escape_string不是基于OO的,您显然正在为您的OO使用其他一些库$query它是什么?)。因此mysql_real_escape_string无法“看到”您正在使用的连接,因此无法正常工作。

如果你打开错误报告(你真的应该),你应该看到为此生成了E_WARNING

目前,我建议改为mysql_escape_string。它的使用可能与您的数据库连接的字符集不匹配,但它现在就可以使用它,并且它不需要连接。理想情况下,使用您实际使用的DB库提供的转义功能。

答案 1 :(得分:-1)

尝试这个片段,我认为你的实际情况发生了错误。

$user_name = $_POST["username"];
echo 'before: '.$user_name;
$user_name = mysql_real_escape_string($user_name);
echo 'after: '.$user_name;