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);
}

谁能告诉我我做错了什么?

MySql.Data 错误:您的 SQL 语法有错误;检查与您的MySQL服务器版本相对应的手册,了解要使用的正确语法

不能参数化表名和列名。

只能参数化值。您需要将表名和列名添加为 sql 查询的一部分。

在将表名放入 SQL 之前,您应该对表名进行非常严格的验证,或者将一组有效表名列入白名单,以避免正常方式的 SQL 注入攻击。

阅读动态SQL的诅咒和祝福

我自己用这段代码解决了这个问题:

string query = "INSERT INTO `"+values[0]+"` VALUES("+values[2]+")";
        MySqlCommand sql = new MySqlCommand(query);
        sql.Connection = connection;
        sql.ExecuteNonQuery();