未知栏' xy'在' where子句'

时间:2016-06-04 20:44:31

标签: c# mysql mysql.data

我正在使用此查询

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

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

Unknown column 'toxic' in 'where clause'

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

1 个答案:

答案 0 :(得分:2)

如果列username是文本列,那么每次要搜索此列时,文字值都应该用单引号括起来

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

但是,这是针对两个主要问题制作查询文本的错误方法:

Sql Injection :黑客用来在您的代码中插入可能破坏您的数据库数据的恶意文本的技术请参阅: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
   }
}