我在 DB 中使用 mysql 和 asp.net 来保存数据。当我在使用 server.HTMLEncode() 后将数据保存在数据库中时,数据在删除\后保存。这就是我保存数据的方式
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
。
那么如何检查上述条件是否成立呢?
最佳答案
HTML 编码不适合编码存储在数据库中的数据。
反斜杠消失的原因是您将 SQL 代码粘贴在一起,并对文本进行编码以显示在网页中,而不是将其转义为 SQL 查询中的文本。反斜杠在 MySQL 中用作转义字符,因此字符串中的任何反斜杠都会转义下一个字符。
您最好使用参数化查询,而不是将数据连接到 SQL 查询中。如果那不可能,您必须正确地转义文本,使其成为 SQL 代码中的字符串文字,因此您必须用双反斜杠替换每个反斜杠,并在每个撇号前加上一个反斜杠。如果您未能正确转义它,您的应用程序将很容易受到 SQL 注入(inject)攻击。
HTML 编码值应该在您将其显示在网页中时完成,而不是在将其放入数据库之前完成。
关于c#、Mysql数据比较问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15894357/