1

我正在使用这个查询

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

假设username是 set toxic,抛出的错误如下:

Unknown column 'toxic' in 'where clause'

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

4

1 回答 1

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
   }
}
于 2016-06-04T21:02:17.703 回答