在更新用户名时验证用户名是否存在

时间:2018-09-01 01:48:01

标签: c# mysql sql

在这种情况下,存在一种用于更新用户信息(用户名,密码,手机号码等)的表格。

下面是我用来检查用户名是否存在于数据库中的代码:

string sql = "SELECT username FROM (SELECT username FROM useraccount WHERE username != @old_uname)ua WHERE BINARY username = @new_uname LIMIT 1;";
MySqlCommand cmd = new MySqlCommand(sql, SecurityMod.dbconn());
cmd.Parameters.AddWithValue("@old_uname", old_uname);
cmd.Parameters.AddWithValue("@new_uname", new_uname);

if (cmd.ExecuteScalar() == null)
{
    isValidNewUname = true;
}

如果用户确实更改了他/她的用户名,则该方法有效。但是,当用户对用户名字段以外的任何内容进行更改时,就会发生问题。 isValidNewUname变量保持为false。任何想法和建议都会有很大帮助。

1 个答案:

答案 0 :(得分:0)

我不是基于获取的用户名,而是选择了uid。我用以下代码解决了这个问题:

string sql = "SELECT uid FROM useraccount WHERE BINARY username = @new_uname;";
                MySqlCommand cmd = new MySqlCommand(sql, SecurityMod.dbconn());
                cmd.Parameters.AddWithValue("@new_uname", new_uname);
                if (cmd.ExecuteScalar() == null || cmd.ExecuteScalar().ToString() == userID)
                {
                    isValidNewUname = true;
                }

此代码更短,更简单,因此更易于维护。这里发生的是查询在数据库中查找@new_uname的uid。然后,它将获取的uid与当前用户的uid进行比较。如果相同,则意味着查询的获取结果只是用户本身,因此,是否相同并不重要,因为查询仅属于一个用户。如果获取的uid不等于当前用户的uid,则意味着该用户输入的用户名已被使用,因此isValidNewUname将为false。如果上面的查询未返回结果,则@new_uname可用,因为它在数据库中没有记录。