MySql.Data 错误:您的 SQL 语法有错误;检查与您的MySQL服务器版本相对应的手册,了解要使用的正确语法
本文关键字:语法 相对 了解 版本 MySQL 您的 SQL 错误 Data 有错误 MySql | 更新日期: 2023-09-27 18:30:46
以下代码:
string query = "INSERT INTO `@tableName` (@tableKeys) VALUES(@tableValues)";
MySqlCommand sql = new MySqlCommand(query);
sql.Connection = connection;
sql.Parameters.Add(new MySqlParameter("@tableName", values[0]));
sql.Parameters.Add(new MySqlParameter("@tableKeys", values[1]));
sql.Parameters.Add(new MySqlParameter("@tableValues", values[2]));
sql.ExecuteNonQuery();
返回错误:
MySql.Data中发生了类型为"MySql.Data.MySqlClient.MySqlException"的未处理异常.dll
其他信息:您的 SQL 语法有误;请查看与您的 MySQL 服务器版本对应的手册,了解在"porto,date"附近使用的正确语法)第 1 行的值('232,17-11-2014 10:48:11')'
我使用这个调用代码:
string[] values = {"logs","porto,date",num+","+date};
bool dbopen = dbManager.OpenConnection();
if(dbopen){
dbManager.Insert(values);
}
谁能告诉我我做错了什么?
不能参数化表名和列名。
只能参数化值。您需要将表名和列名添加为 sql 查询的一部分。
在将表名放入 SQL 之前,您应该对表名进行非常严格的验证,或者将一组有效表名列入白名单,以避免正常方式的 SQL 注入攻击。
阅读动态SQL的诅咒和祝福
我自己用这段代码解决了这个问题:
string query = "INSERT INTO `"+values[0]+"` VALUES("+values[2]+")";
MySqlCommand sql = new MySqlCommand(query);
sql.Connection = connection;
sql.ExecuteNonQuery();