c#、Mysql数据比较问题
本文关键字:比较 问题 数据 Mysql | 更新日期: 2023-09-27 18:08:15
我使用mysql与asp.net在数据库中保存数据。当我使用server. htmlcode()后在DB中保存数据时,删除'后保存数据。这就是我保存数据的方法
INSERT INTO Users(ID,Name) Values(1,Server.HTMLEncode(User.Identity.Name))
在这种情况下,如果名称是XXX'ABC,它被保存为XXXABC。在DB中保存时删除斜杠。
下次当我读到相同的内容时,我需要检查登录的用户是否是我保存数据的用户,所以我执行
if ( existingRowEditor == Server.HtmlEncode(User.Identity.Name))
{
}
,但问题是,上述条件总是假的,因为我有以下值existingRowEditor="XXXABC"
和Server.HtmlEncode(User.Identity.Name) =XXX''ABC
.
那么我如何检查上述条件是否为真呢?
HTML编码不适合编码数据以存储在数据库中。
反斜杠消失的原因是,你是粘贴在一起的SQL代码,并编码文本显示在网页上,而不是转义它作为一个SQL查询文本。反斜杠在MySQL中用作转义字符,因此字符串中的任何反斜杠都将转义下一个字符。
最好使用参数化查询,而不是将数据连接到SQL查询中。如果不可能,必须正确转义文本,使其成为SQL代码中的字符串字量,因此必须将每个反斜杠替换为双反斜杠,并在每个撇号前加上反斜杠。如果您没有正确地转义它,您的应用程序将为SQL注入攻击敞开大门。
HTML编码值应该在你将其显示在网页中时完成,而不是在你将其放入数据库之前。
您可以使用以下命令:
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();