gpt4 book ai didi

c# - 如何在 C# ASP.NET Core 中从没有 id 的 MySql 中选择一个项目

转载 作者:太空宇宙 更新时间:2023-11-03 11:31:55 24 4
gpt4 key购买 nike

我正在尝试使用用户名而不是 ASP.Net Core 中的 id 从 mysql 表中获取用户,GET 方法中的默认列是 id。我试图将其更改为用户名,但该列未知。

在我的表中,用户名、密码和电子邮件是TEXT类型,id是INT类型。

我修改后的代码是:

// GET: api/Person/XXX
[HttpGet("{uname}", Name = "Get")]
public Person Get(string uname)
{
ConnectMysql();

Person p = new Person();
string queryString = "SELECT * FROM users WHERE uname = " + uname;

MySqlCommand cmd = new MySqlCommand(queryString, conn);

MySqlDataReader myReader = cmd.ExecuteReader();

if (myReader.Read())
{
p.id = (int)myReader["id"];
p.name = myReader["uname"].ToString();
p.password = myReader["pword"].ToString();
p.email = myReader["email"].ToString();

return p;
}
else
{
return null;
}
}

然后我尝试通过调用 http://localhost:54203/api/Person/q 在表中获取一个项目('q'是表中存在的项目)。

错误是 MySql.Data.MySqlException:Unknown column 'q' in 'where clause'

我该如何解决?

最佳答案

您需要在值周围加上单引号,如下所示:

string queryString = "SELECT * FROM users WHERE uname = '" + uname + "'";

没有它们,MySql 会尝试将您的 uname 值解释为列名。

但不要那样做!

该代码极易受到 sql 注入(inject)攻击。这样做,您的网站就会在您注册第一个用户之前被黑。

更像这样构造代码:

// GET: api/Person/XXX
[HttpGet("{uname}", Name = "Get")]
public Person Get(string uname)
{
// Don't manage the conneciton like this.
// .Net uses connection pooling, where in most cases you really do want
// a new connection object for each call to the db
// ConnectMysql();

string queryString = "SELECT * FROM users WHERE uname = @uname";

using (var conn = new MySqlConnection("connection string here"))
using (var cmd = new MySqlCommand(queryString, conn))
{
cmd.Parameters.Add("@uname", MySqlDbType.VarChar, 20).Value = uname;
conn.Open();

using (var myReader As MySqlDataReader = cmd.ExecuteReader())
{
if (myReader.Read())
{
return new Person() {
id = (int)myReader["id"],
name = myReader["uname"].ToString(),
password = myReader["pword"].ToString(),
email = myReader["email"].ToString()
};
}
}
}
return null;
}

当我在这里时,您确实以纯文本形式存储了密码。在 any list of security sins ,SQL 注入(inject)位于顶部,纯文本密码紧随其后。

关于c# - 如何在 C# ASP.NET Core 中从没有 id 的 MySql 中选择一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49120898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com