我希望能够使用 id 或用户名验证登录表单,同时使用 c# 从 mysql 数据库获取数据
Posted
技术标签:
【中文标题】我希望能够使用 id 或用户名验证登录表单,同时使用 c# 从 mysql 数据库获取数据【英文标题】:i want to be able to validate a login form with an id or username, while getting the data from mysql database using c# 【发布时间】:2020-01-04 09:48:24 【问题描述】:我正在做一个项目,所以我决定尝试一些 CRUD 操作以便能够操作我的数据库。
我已经创建了一个表单来将数据插入数据库并且它工作正常,但我发现创建 read 的表单很困难。
public int login(string id, string name)
mysqlDataReader dr;
int i = 0;
try
string query = "SELECT * FROM `all_data` WHERE admin_ID=@id and admin_Name=@name;
open_conn();
MySqlCommand cmd = new MySqlCommand(query,conn);
cmd.Parameters.AddWithValue("@id", id);
cmd.Parameters.AddWithValue("@name",name);
dr = cmd.ExecuteReader();
if (dr.HasRows)
while (dr.Read())
catch(Exception ex)
MessageBox.Show(ex.Message);
return i;
这是我感到困惑的地方,因为我希望它从我的数据库中读取并检查它是否与我的输入匹配。 如果匹配,那么它应该执行一个操作.. 可能会显示一个 MessageBox 说“登录成功”。
【问题讨论】:
SQL Injection alert - 您应该不将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 查看Little Bobby Tables 【参考方案1】:首先,不要通过直接连接 id 和 name 来构建查询。这会引入 SQL 注入漏洞。
string query = "SELECT * FROM `all_data` WHERE admin_ID='"+id+ "' and admin_Name='"+name+"' ";
改为使用参数化查询。
string query = "SELECT * FROM `all_data` WHERE admin_ID=@id and admin_Name=@name";
cmd.Parameters.AddWithValue("@id", id);
cmd.Parameters.AddWithValue("@name",name);
接下来,我们只需要检查记录是否与输入匹配。 因此,我们可以将查询更改为下面,以查看匹配的记录数。
string query = "SELECT COUNT(*) FROM `all_data` WHERE admin_ID=@id and admin_Name=@name";
最后,我们可以使用 ExecuteScalar() 来代替 ExecuteReader() 来获取计数。如果计数大于 0,我们就知道匹配成功。
int matchingRecords = (int).ExecuteScalar();
if (matchingRecords > 0)
// Logic for successful match
【讨论】:
以上是关于我希望能够使用 id 或用户名验证登录表单,同时使用 c# 从 mysql 数据库获取数据的主要内容,如果未能解决你的问题,请参考以下文章