我正在为我的网站编写一个身份验证系统,我想确保我能够防止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"));
答案 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;