Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查询中存在语法错误,但查询是正确的_C#_Mysql - Fatal编程技术网

C# 查询中存在语法错误,但查询是正确的

C# 查询中存在语法错误,但查询是正确的,c#,mysql,C#,Mysql,我编写了一个通用方法来搜索特定表中是否存在值,该方法非常简单: 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"); MySqlCo

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

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());
}
假设我想检查表上是否存在id为
2538782
的记录匹配,我会:

CheckRecordExist(2538782, "match", "id");
因此,
查询
变量将是:

SELECT * FROM match WHERE id = @id
如果我在
PhpMyAdmin
中运行此命令,将
id
替换为值,我将得到正确的响应,但在我的应用程序中,我将得到:

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

怎么了?

请参阅

MATCH
是MySQL中的保留关键字

只有将保留字括在分隔符中,才能将其用作标识符。MySQL的默认标识符分隔符是回勾


请参见

警告:SQL注入风险@rory.ap我认为几乎所有的堆栈溢出SQL问题都是如此。@rory.ap我在我的机器上本地运行这个程序,这个应用程序永远不会被推送online@cojac,它是否在线并不重要,您可以自己进行SQL注入。并非所有的SQL注入问题都是由恶意web用户造成的。@rory.ap,不可能对表名或列名使用查询参数。谢谢你,比尔,这是困扰我几个小时的问题,我很感激。祝你一天愉快:)