0

我有一个查询:

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 Framework 使用以下简单代码运行查询时:

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 框架没有运行相同的更新语句。

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

提前致谢。

4

1 回答 1

0

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

首先,创建您的 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);

希望这可以帮助!

于 2013-09-18T20:58:44.407 回答