首頁  >  問答  >  主體

如何讓 MySQL 檢查並驗證另一列的靜態結果

這是我目前運行的程式碼:

private void button1_Click(object sender, EventArgs e)
    {
        string server = "207.244.70.217";
        string database = "nextgene_NGH";
        string uid = "EXAMPLEUID";
        string password = "EXAMPLEPASSWORD";
        string ssl = "None";

        string connectionString = $"SERVER={server};DATABASE={database};UID={uid};PASSWORD={password};SSL Mode={ssl};";    
        using var connection = new MySqlConnection(connectionString);
        connection.Open();
        using var command = new MySqlCommand("SELECT members_pass_hash FROM core_members && WHERE name = @name;", connection);
        command.Parameters.AddWithValue("@name", maskedTextBox1.Text);
        var hashedPassword = (string) command.ExecuteScalar();
        if (!(hashedPassword is null && !BCrypt.Net.BCrypt.Verify(maskedTextBox2.Text, hashedPassword)))
        {
            
            MessageBox.Show("Login Successful");
        }
    }

上面的程式碼可以登入我的資料庫。問題是它只檢查登入名稱和密碼。由於這兩個工作,我不知道如何呼叫另一列 mgroup_others 並檢查那裡是否有 7 的結果。我在這裡附上了我的資料庫的照片:

這是我重寫的函數:

private void button1_Click(object sender, EventArgs e)
    {
        string server = "207.244.70.217";
        string database = "nextgene_NGH";
        string uid = "EXAMPLEUID";
        string password = "EXAMPLEPASSWORD";
        string ssl = "None";
        string vipcheck = "7";

        string connectionString = $"SERVER={server};DATABASE={database};UID={uid};PASSWORD={password};SSL Mode={ssl};";    
        using var connection = new MySqlConnection(connectionString);
        connection.Open();
        using var command = new MySqlCommand("SELECT members_pass_hash AND mgroup_others FROM core_members && WHERE name = @name;", connection);
        command.Parameters.AddWithValue("@name", maskedTextBox1.Text);
        var hashedPassword = (string) command.ExecuteScalar();
        if (!(hashedPassword is null && !BCrypt.Net.BCrypt.Verify(maskedTextBox2.Text && vipcheck != mgroup_others, hashedPassword)))
        {
            
            MessageBox.Show("Login Successful");
        }
    }

P粉111627787P粉111627787277 天前366

全部回覆(2)我來回復

  • P粉459440991

    P粉4594409912024-01-17 16:57:14

    SELECT 子句應如下圖所示:

    SELECT members_pass_hash, mgroup_others

    然後,由於您獲得了多個值,因此您應該使用ExecuteReader() 或使用DataAdapterFill() DataTable,因此您可以使用所有值。如果您想成為一名成功的開發人員,那麼您應該自己編寫這些程式碼,以便您理解它,而不是只是複製我們為您提供的程式碼。

    回覆
    0
  • P粉533898694

    P粉5338986942024-01-17 13:58:09

    如果您需要知道的是 mgroup_others 列中的值是否等於 7,您可以如下更新 SQL:

    using var command = new MySqlCommand("""
        SELECT members_pass_hash
        FROM core_members
        WHERE name = @name AND mgroup_others = 7;
        """, connection);
    command.Parameters.AddWithValue("@name", maskedTextBox1.Text);
    var hashedPassword = (string) command.ExecuteScalar();

    這種方法的優點(與其他一些答案相比)是您仍然可以使用 ExecuteScalar ,因為您只讀取單一值。

    如果您需要檢索 mgroup_others 的值並在 C# 程式碼中檢查它,您應該使用顯示如何使用 ExecuteReader資料適配器

    回覆
    0
  • 取消回覆