'where clause' 中的未知列 'xy'

Unknown column 'xy' in 'where clause'

我正在使用这个查询

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

假设username设置为toxic,抛出的错误如下:

Unknown column 'toxic' in 'where clause'

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

如果列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
   }
}