我有一个疑问:
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/