我希望能够使用 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 数据库获取数据的主要内容,如果未能解决你的问题,请参考以下文章

django登录表单和表单验证在引导模式中使用ajax

使用 ASP.NET 表单身份验证的用户模拟

在 Spring Security 中使用配置文件名称或电子邮件登录

前端编程提高之旅----表单验证插件与cookie插件

如何使登录表单在 Django 的整个站点上可用

停止在身份验证时重新生成/使 CSRF 无效