C#中MySqlCommand.Parameters.Add给CommandText加转义斜杠报错问题
问题原因与解决方案
报错核心诱因
你看到的额外转义斜杠就是报错的直接原因,根本问题是你完全用错了MySQL参数化查询的逻辑:
- 参数化查询的设计逻辑是SQL语句本身作为
MySqlCommand的第一个构造参数传入,只有可变的字段值用占位符代替,而你把整个拼接完成的SQL语句当成了参数值传给命令对象,MySQL驱动会自动对字符串参数内的所有单引号做转义处理,最终执行的SQL就变成了INSERT INTO testtable (testcol) VALUES (\'testvalue\'),自然触发语法错误。 - 你之前手动拼接SQL字符串的写法本身就存在SQL注入风险,完全违背了参数化查询的设计目的。
- 使用
AddWithValue报错的原因和上面一致:你把整个SQL作为参数传入时,AddWithValue自动推断参数类型出错,就会抛出格式异常。
正确实现代码
// 1. 编写带参数占位符的SQL语句,不要自行拼接字段值 string insertSql = "INSERT INTO testtable (testcol) VALUES (@testColVal);"; string testParam = "testvalue"; string connString = "server = localhost; database = xxxxx; User = xxxxx; Password = xxxxx; port = 3306"; // 连接对象也用using包裹自动释放资源 using (MySqlConnection conn = new MySqlConnection(connString)) { conn.Open(); using (MySqlCommand cmd = new MySqlCommand(insertSql, conn)) { // 仅把可变的字段值作为参数传入,驱动会自动处理转义,无SQL注入风险 cmd.Parameters.Add("@testColVal", MySqlDbType.Text).Value = testParam; cmd.ExecuteNonQuery(); } }
内容的提问来源于stack exchange,提问作者ADBF
相关产品推荐
相关产品推荐

