我有一个问题:
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();
}
}
我在db中得到以下结果:
[{"Id":7,"FParam":{"html":""<p>\n\ttest for group</p>\n""}}]
正如您所看到的,SQL在两个源中都是相同的。由于某些原因,MySQL Framework没有运行相同的更新语句。
我错过了什么吗?打开连接时是否有格式化选项或设置?有什么建议吗?
提前致谢。
答案 0 :(得分: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);
希望这有帮助!