检查MySQL数据库中是否存在用户失败

时间:2016-11-18 08:04:08

标签: c# mysql

不确定为什么以下代码会给我一个例外。我试图检查MySQL数据库中是否存在用户名,如果没有,那么我想创建一个用户。如果我自己运行任一查询,那么它可以正常但不能在一起。

    int valid = -1;            

    using (MySqlConnection cnn = new MySqlConnection(conString))
        {
            cnn.Open();

            bool usernameExists = false;

            string sql1 = String.Format("SELECT Username FROM Users WHERE Username = \"{0}\"", username);
            MySqlCommand cmd1 = new MySqlCommand(sql1, cnn);

            usernameExists = (int)cmd1.ExecuteScalar() > 0;

            if (!usernameExists)
            {
                string sql = String.Format("INSERT INTO Users(Username, Password) VALUES(\"{0}\", \"{1}\")", username, password);
                MySqlCommand cmd = new MySqlCommand(sql, cnn);

                valid = cmd.ExecuteNonQuery();
            }
        }
    return valid;

2 个答案:

答案 0 :(得分:0)

首先,MySQL使用单引号。这意味着您的查询将是:

string.format("SELECT Username FROM Users WHERE Username = '{0}' LIMIT 1", Username);

但是,SQL注入非常容易受到攻击。这是使用MySQL参数来阻止它的代码。

int valid = -1;            

using (MySqlConnection cnn = new MySqlConnection(conString))
    {
        cnn.Open();

        bool usernameExists = false;

        MySqlCommand cmd1 = new MySqlCommand("SELECT Username FROM Users WHERE Username = @username LIMIT 1", cnn);
        cmd1.Parameters.AddWithValue("@username", username);

        usernameExists = (int)cmd1.ExecuteScalar() > 0;

        if (!usernameExists)
        {
            MySqlCommand cmd = new MySqlCommand("INSERT INTO Users(Username, Password) VALUES(@username, @password)", cnn);
            cmd.Parameters.AddWithValue("@username", username);
            cmd.Parameters.AddWithValue("@password", password);

            valid = cmd.ExecuteNonQuery();
        }
    }
return valid;

你可以尝试一下吗?

答案 1 :(得分:0)

我通过更改第一个查询来实现它:

MySqlCommand cmd1 = new MySqlCommand("SELECT Username FROM Users WHERE Username = @username LIMIT 1", cnn);

MySqlCommand cmd1 = new MySqlCommand("SELECT COUNT(UserID) FROM Users WHERE Username = @username", cnn);
int valid = int.Parse(cmd.ExecuteScalar().ToString());

感谢您的帮助。