C#reader.HasRows始终返回false,即使表中还有行
永远不要使用字符串连接来构建sql查询。而是使用参数化查询来防止sql注入和其他问题。这才是真正的问题 但是为了修复您的bug,您需要连续调用C#reader.HasRows始终返回false,即使表中还有行,c#,C#,永远不要使用字符串连接来构建sql查询。而是使用参数化查询来防止sql注入和其他问题。这才是真正的问题 但是为了修复您的bug,您需要连续调用MySqlDataReader.Read两次。这将使读者进入下一条记录。相反,只做一次: password = md5Crypt(password); User u = null; String sql = "SELECT * FROM user WHERE username='" + username + "' AND password='" + pas
MySqlDataReader.Read
两次。这将使读者进入下一条记录。相反,只做一次:
password = md5Crypt(password);
User u = null;
String sql = "SELECT * FROM user WHERE username='" + username + "' AND password='" + password + "'";
try
{
conn.Open();
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader reader = cmd.ExecuteReader();
reader.Read();
Console.WriteLine(reader.Read());
if (reader.HasRows)
{
u = new User(reader["username"].ToString(), reader["password"].ToString(), reader["name"].ToString(), reader["role"].ToString());
}
else
{
u = null;
}
conn.Close();
}
catch (MySqlException e)
{
Console.WriteLine(e.Message);
conn.Close();
return null;
}
return u;
还可以对连接使用
using
状态项(或try catch finally),以确保每次都会释放/关闭连接,即使发生错误也是如此。永远不要使用字符串连接来构建sql查询。而是使用参数化查询来防止sql注入和其他问题。这才是真正的问题
但是为了修复您的bug,您需要连续调用MySqlDataReader.Read
两次。这将使读者进入下一条记录。相反,只做一次:
password = md5Crypt(password);
User u = null;
String sql = "SELECT * FROM user WHERE username='" + username + "' AND password='" + password + "'";
try
{
conn.Open();
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader reader = cmd.ExecuteReader();
reader.Read();
Console.WriteLine(reader.Read());
if (reader.HasRows)
{
u = new User(reader["username"].ToString(), reader["password"].ToString(), reader["name"].ToString(), reader["role"].ToString());
}
else
{
u = null;
}
conn.Close();
}
catch (MySqlException e)
{
Console.WriteLine(e.Message);
conn.Close();
return null;
}
return u;
还可以对连接使用
using
statemennt(或try catch finally),以确保每次都能释放/关闭连接,即使是在发生错误的情况下。@Tim但这会让乐趣消失。至少目前我可以尝试以用户名”或1=1;--
并可能获得一个管理员帐户。@John:删除了注释,因为添加为答案。你说得对,其他人现在都玩得很开心:)@Tim,但这就失去了乐趣。至少目前我可以尝试以用户名”或1=1;--
并可能获得一个管理员帐户。@John:删除了注释,因为添加为答案。你说得对,其他人现在玩得很开心:)