2011-05-23 57 views
5

我正在爲我的網站編寫一個身份驗證系統,我想確保我的SQL注入受到保護。我使用的是'mysql_real_escape_string',但是這完全清除了字符串。用戶名就像'Damo',但是通過該功能後,它就消失了。mysql_real_escape_string刪除整個字符串

我在做什麼錯? (它沒有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

您是否打開了魔術引號? (get_magic_quotes_gpc()) – 2011-05-23 21:19:36

回答

7

mysql_real_escape_string需要連接。假設連接已被創建爲同一個庫的一部分。

然而,mysql_real_escape_string不是面向對象的基礎,而你清楚地使用一些其他庫,供您OO $query是什麼呢?)。因此mysql_real_escape_string無法「看到」您正在使用的連接,因此無法正常工作。

如果你打開錯誤報告(你真的應該),你應該看到爲此生成的E_WARNING

現在,我建議您改爲mysql_escape_string。它的使用可能與您的數據庫連接的字符集不匹配,但它現在可以做到,並且不需要連接。理想情況下,使用通過數據庫庫提供的轉義功能,您使用實際上是

+0

我是個白癡。 mysql_real_escape_string已經包含在我正在使用的SQL連接類中。 感謝您的意見,這讓我看到了正確的地方。 – Damo 2011-05-23 21:30:27

+0

@Damo:沒問題。絕對使用你正在使用的庫中提供的函數;它會知道你創建的連接,因此它會正常工作。並打開錯誤報告!祝你好運! – 2011-05-23 21:35:16

-1

試試這個片段,我認爲你錯了什麼是actully發生。

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