首页 > 解决方案 > 查询语法错误但查询正确

问题描述

我写了一个通用方法来搜索特定表中是否存在值,方法非常简单:

public bool CheckRecordExist(int id, string tableName, string column)
{
    string connection = string.Format("Server=localhost; database={0}; UID=root; password=root; SslMode=none; CharSet=utf8;", "myDb");
    MySqlConnection conn = new MySqlConnection(connection);

    string query = "SELECT * FROM " + tableName + " WHERE " + column " = @" + column;
    MySqlCommand = new MySqlCommand(query, conn);
    MySqlCommand.Parameters.AddWithValue("@" + column, id);

   return Convert.ToBoolean(MySqlCommand.ExecuteScalar());
}

假设我想检查2538782表匹配中是否存在具有 id 的记录,我这样做:

CheckRecordExist(2538782, "match", "id");

所以query变量将是:

SELECT * FROM match WHERE id = @id

如果我在 中运行它PhpMyAdmin,用值替换id,我会得到正确的响应,但在我的应用程序中,我会得到:

MySql.Data.MySqlClient.MySqlException: '你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“match WHERE id = 2538782”附近使用正确的语法

怎么了?

标签: c#mysql

解决方案


https://dev.mysql.com/doc/refman/5.7/en/keywords.html

MATCH是 MySQL 中的保留关键字。

只有将保留字括在分隔符中时,才能使用它们作为标识符。MySQL 标识符的默认分隔符是反引号。

https://dev.mysql.com/doc/refman/5.7/en/identifiers.html


推荐阅读