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,不可能对表名或列名使用查询参数。谢谢你,比尔,这是困扰我几个小时的问题,我很感激。祝你一天愉快:)