2009-02-16 97 views
0

「我使用Flash AS3,PHP和MySQL」Mysql的真正轉義字符串與普通字符串

之間有什麼區別:

$username =  $_POST['username']; 
$password = md5($_POST['password']); 

$username = mysql_real_escape_string( $_POST['username']); 
$password = mysql_real_escape_string(md5($_POST['password'])); 

我從閃存AS3發送並檢索變量到php並且再次返回到AS3。前者(沒有mysql_real_escape_string)工作正常。但是後者在閃存中會出錯。錯誤消息是:「參數文本必須是非空的。」

我試過「echo」(display)都是結果,結果都是一樣的。很奇怪..任何人有任何想法?

回答

3

請記住,mysql_real_escape_string()需要打開數據庫連接才能正常工作;如果你在使用mysql_connect之前調用它,它不會產生預期的效果。

2

如果您想在查詢中使用字符串,然後由mysql_query函數執行,則只需要mysql_real_escape_string。此外,如果您不能確保此字符串不包含某些可能違反您所要查詢的完整性的字符,則只需要此函數。

+0

我確實需要使用mysql_query,因爲我將變量與我的用戶表值進行比較,如果它匹配,則登錄成功。 – roa3 2009-02-16 10:20:13

0

第一種形式將完全按照您的想法進行:將提交的值和MD5獲取到您的變量中。

如果有的話,第二種形式也會轉義任何「危險」字符。嘗試使用包含引號的用戶名,您將獲得它。

2

這樣可以很清楚對方是什麼答案correcty狀態:

我可能被罰款使用您的第一個版本,如果你想通過這個變量閃爍。 如果你想在數據庫查詢中使用這個變量,那麼使用你的第一個版本是不行的。

含義:

OK

<param name="FlashVars" 
value="vGetData=./your/path/yourData.php?params=<?php echo $username; ?>" /> 

NOT OK

$query = "SELECT something FROM users WHERE username=".$username; 

我以爲你第一次授權用戶,然後將數據發送到閃存。如果是這樣,似乎沒有問題。對?

2

錯誤消息有幫助你。閱讀它們。

錯誤消息是:「參數文本必須爲非空」。

這似乎表明,無論是你的用戶名或密碼字符串爲空(空)和mysql_real_escape_string或(更可能)您md5功能拒絕接受空字符串作爲輸入。首先測試一個空字符串,你應該沒問題。

此外,MD5哈希僅包含字母數字字符,所有這些字符在任何地方都可以安全使用。您不需要通過mysql_real_escape_string傳遞它們,因爲散列過程已經對輸入進行了消毒。

相關問題