gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:17:51 24 4
gpt4 key购买 nike

我有一个疑问:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com