我正在使用这个查询

var query = $"SELECT id, username, password, salt FROM users WHERE username={username}";

假设username设置为toxic,则引发的错误如下:
Unknown column 'toxic' in 'where clause'

我已经尝试添加单引号(′),抛出另一个错误(在语法中有“中毒”附近的错误)。但是,我想知道这个查询有什么问题?我详细阐述并找到了证据,证明这来自于查询本身。

最佳答案

如果列username是文本列,则每次要搜索此列时,文本值都应括在单引号之间

string username = "Steve";
var query = $"SELECT id, username, password, salt FROM users WHERE username='{username}'";

但是,这是为两个主要问题生成查询文本的错误方法:
Sql注入:黑客用来在代码中插入恶意文本以破坏数据库数据的技术参见:Sql Injection
解析问题:包含单引号的字符串需要正确格式化,需要将十进制值转换为具有对数据库区域设置、日期有效的十进制分隔符的字符串。。。
所以参数方法可以让你从这些问题中解脱出来
var query = @"SELECT id, username, password, salt
              FROM users WHERE username=@username";
using(MySqlConnection cnn = new MySqlConnection(.......))
using(MySqlCommand cmd = new MySqlCommand(query, cnn))
{
   cnn.Open();
   cmd.Parameters.Add("@username", MySqlDbType.VarChar).Value = username;
   using(MySqlDataReader reader = cmd.ExecuteReader())
   {
       ..... use your data
   }
}

关于c# - “where子句”中的未知列“xy”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37634843/

10-12 02:36