c#、Mysql数据比较问题

标签 c# asp.net mysql

我在 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/

相关文章:

mysql - 为什么某些型号的代码为 'Connection refused - connect(2)'?

mysql - 为什么Mysql在join另一个表B时对表A使用全表扫描?

c# - 使用 Servicestack 在 RabbitMQ 队列上设置 TTL

c# - StackOverflowException 在 C# 中处理事件

c# - 模板只能与字段访问、属性访问、一维数组索引错误一起使用

css - 选定的行颜色在 jqgrid 中没有改变黄色

asp.net - Response.Redirect() 不起作用

mysql - 按名称排序,然后按父级排序

c# - 如何覆盖常量派生类?

c# - “public”对此项目无效