2013-04-09 35 views
1

我正在使用mysql與asp.net將數據保存在數據庫中。在使用server.HTMLEncode()後,當我將數據保存在數據庫中時,數據在刪除\後保存。這就是我如何保存數據c#,Mysql數據比較問題

INSERT INTO Users(ID,Name) Values(1,Server.HTMLEncode(User.Identity.Name)) 

在若名是XXX \ ABC這種情況下,它被保存爲XXXABC。在保存在數據庫中時刪除了斜槓。

當我讀到一樣,我需要檢查,如果登錄的用戶

接下來的時間,所以我下面

if (existingRowEditor == Server.HtmlEncode(User.Identity.Name)) 
{ 

} 

但問題是,上述條件始終是假的對我所保存的數據的一個因爲我有以下值 existingRowEditor="XXXABC"Server.HtmlEncode(User.Identity.Name) =XXX\\ABC

那麼如何檢查上述條件是否屬實?

+0

爲什麼編碼的HTML的用戶名嗎? – 2013-04-09 06:00:48

+0

即使我不HTMLEncode的名稱,它仍然保存在XXXABC數據庫即刪除\\從名稱 – khurram 2013-04-09 06:11:56

+0

你已經給你如何保存數據的「代碼」很奇怪 - 它是C#和SQL的混合物。請顯示代碼*實際*的樣子。如果你不使用參數化SQL,那很可能是問題所在。 – 2013-04-09 06:18:23

回答

1

HTML編碼不適合編碼數據以存儲在數據庫中。

反斜槓消失的原因是您將SQL代碼粘貼在一起,並對文本進行編碼以便在網頁中顯示,而不是將其轉義爲SQL查詢中的文本。反斜槓在MySQL中用作轉義字符,所以字符串中的任何bacslashes都會轉義下一個字符。

最好您應該使用參數化查詢,而不是將數據連接到SQL查詢中。如果這是不可能的,你必須必須正確地轉義文本在SQL代碼中的字符串字面值,所以你必須用雙斜槓替換每個反斜槓,並且用反斜槓前置每個撇號。如果你沒有正確地轉義它,你的應用程序將會全面打開SQL注入攻擊。

HTML編碼值應在網頁中顯示時進行,而不是在將其放入數據庫之前完成。

0

您可以使用下列內容:

var sqlQueryString = "INSERT INTO Users(ID,Name) Values(@Id,@Name)"; 
var sqlCommand = new SqlCommand(sqlQueryString, sqlConnection); 
sqlCommand.Parameters.Add(new SqlParameter("Id", 1); 
sqlCommand.Parameters.Add(new SqlParameter("Name", User.Identity.Name); 
sqlCommand.ExecuteNonQuery();