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

nc1teljy  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(450)

在这种情况下,有一个表单用于更新用户信息(用户名、密码、手机号等)。
下面是我用来检查数据库中是否存在用户名的代码:

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。任何想法和建议都会大有帮助。

mspsb9vt

mspsb9vt1#

我没有基于获取的用户名,而是选择了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\u uname的uid。然后将获取的uid与当前用户的uid进行比较。如果相同,则意味着查询的获取结果只是用户本身,因此它们是否相同并不重要,因为它们只属于一个用户。如果获取的uid不等于当前用户的uid,则表示用户输入的用户名已被获取,因此isvalidnewuname将为false。如果上面的查询没有返回结果,那么@new\u uname是可用的,因为它在数据库中没有记录。

相关问题