mysql - .Net MySQL 驱动程序未正确处理“

标签 mysql .net

我有一个疑问:

UPDATE tableA SET content = '[{\"Id\":7,\"FParam\":{\"html\":\"\\\"<p>\\\\n\\\\ttest</p>\\\\n\\\"\"}}]',time = 1379516448 WHERE id = 1107;

当使用 phpMyAdmin 运行时,内容列具有以下正确值:

[{"Id":7,"FParam":{"html":"\"<p>\\n\\ttesting publishing</p>\\n\""}}]

当我使用以下简单代码使用 .NET MySQL 框架运行查询时:

using (var connection = new MySqlConnection(ConnectionString)) {
    await connection.OpenAsync();

    string updateCommandSQL = "UPDATE tableA SET content = '[{\"Id\":7,\"FParam\":{\"html\":\"\\\"<p>\\\\n\\\\ttest</p>\\\\n\\\"\"}}]',time = 1379516448 WHERE id = 1107"

    using (var updateCommand = new MySqlCommand(updateCommandSQL, connection))
    {
        return await updateCommand.ExecuteNonQueryAsync();
    }
}

我在数据库中得到以下结果:

[{"Id":7,"FParam":{"html":""<p>\n\ttest for group</p>\n""}}]

正如您所见,两个源中的 SQL 是相同的。由于某种原因,MySQL 框架没有运行相同的更新语句。

我错过了什么吗?打开连接时是否有格式化选项或设置或类似的内容?有什么建议吗?

提前致谢。

最佳答案

您可能会花费大量时间尝试正确转义字符串,但我强烈建议对您的查询进行参数化。这将解决您的问题,并防止发生可能的 SQL 注入(inject)攻击。

首先,创建 SQL 语句:

string updateCommandSQL = "UPDATE tableA SET content = @content, time = @time WHERE id = @id";

接下来,将三个参数添加到您的 SqlCommand 中:

updateCommand.Parameters.AddWithValue("@content", newContent);
updateCommand.Parameters.AddWithValue("@time", 1379516448);
updateCommand.Parameters.AddWithValue("@id", 1107);

希望这有帮助!

关于mysql - .Net MySQL 驱动程序未正确处理“,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18876536/

相关文章:

MySQL Workbench 用户输入

php - 将 SQL 值存储为 PHP 变量 ("Object of class mysqli_result could not be converted to int")

mysql - 在启动时创建数据库连接 - sails.js

mysql - 如何从存储在备份硬盘上的 Windows 7 MySQL 数据库中获取数据库?

c# - 项目目标框架未安装 4.7.1 和 4.7.2

.net - 是否可以重用.NET WinForms Form对象?

MySQL如何高效比较表之间的多个字段?

c# - HTTP 1.1 请求消息无法获取最后的字节 block ,同时通过套接字获取结果

c# - HTTPListener 无法通过网络工作

c# - 为什么 MapInheritedProperties() 将我的实体映射到两个表中?