在这种情况下,存在一种用于更新用户信息(用户名,密码,手机号码等)的表格。
下面是我用来检查用户名是否存在于数据库中的代码:
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。任何想法和建议都会有很大帮助。
答案 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可用,因为它在数据库中没有记录。