错误“;检查与MySQL服务器版本对应的手册”
本文关键字:版本 服务器 检查 MySQL 错误 | 更新日期: 2023-09-27 18:14:05
你好,我的代码有点问题。我得到这个错误,它取决于
myReader = SelectCommand.ExecuteReader();
我真的不明白。
你的SQL语法有错误;查看与MySQL服务器版本对应的手册,了解在第1行
处"password"附近使用的正确语法。
MySqlConnection conn = new MySqlConnection("secretstring")
MySqlCommand SelectCommand = new MySqlCommand("SELECT * FROM userspassword where'" + this.loginuser.Text + "'and password'" + this.passworduser.Text, conn);
MySqlDataReader myReader;
conn.Open();
//myReader = SelectCommand.ExecuteReader();
myReader = SelectCommand.ExecuteReader();
int count = 0;
while (myReader.Read())
{
count = count + 1;
}
if (count == 1)
{
MessageBox.Show("Correct");
Form2 pannel = new Form2();
pannel.Show();
Hide();
}
else if (count > 1)
{
MessageBox.Show("More then 1 user logged in");
}
else
MessageBox.Show("Incorrect password or username");
conn.Close();
缺少供用户比较的字段名
MySqlCommand SelectCommand = new MySqlCommand("SELECT * FROM userspassword where " +
"username = '" + this.loginuser.Text + "' and password = '" +
this.passworduser.Text +"'" , conn);
以及字段和值之间的一些空格和右引号。
说到这里,让我指出字符串连接的危险。如果你的一个文本框中包含一个单引号,命令将失败并出现语法错误,或者,如果你有一个恶意用户,他/她可以准备Sql注入攻击,在输入框中插入Sql文本。
你应该写一个像这样的参数化查询
MySqlCommand SelectCommand = new MySqlCommand("SELECT * FROM userspassword where " +
"username = @uname and password = @pwd", conn);
SelectCommand.Parameters.AddWithValue("@uname",this.loginuser.Text);
SelectCommand.Parameters.AddWithValue("@pwd",this.passworduser.Text);
myReader = SelectCommand.ExecuteReader();
在数据库中以明文形式存储密码还存在另一个问题。从安全的角度来看,这是另一件要避免的事情。您应该存储密码的散列,将散列函数应用于用户输入文本,并将该散列值作为参数传递,以检查数据库字段
查询的where子句中缺少列名
"SELECT * FROM userspassword where'" + this.loginuser.Text
^^^^^^^ Column name is missing..
尝试;
MySqlCommand SelectCommand = new MySqlCommand("SELECT * FROM userspassword where " + "YourColumnName = '" + this.loginuser.Text + "' and password '" + this.passworduser.Text +"'" , conn);
但更重要的是,您应该始终使用参数化查询。这种字符串连接是导致SQL注入攻击的原因。
你可以阅读如何从"Bobby tables"中注入SQLXKCD漫画作品?
您有一个空格问题,并且缺少一个列名:
MySqlCommand SelectCommand =
new MySqlCommand("SELECT * FROM userspassword where username='"
+ this.loginuser.Text + "' and password='"
+ this.passworduser.Text +"'", conn);
BTW -你有一个潜在的SQL注入问题在这里
这显然不是问这个问题的人的情况,但对于其他人有这个错误:确保您没有使用存在的SQL关键字命名您的列。KEY
和index
是最可能的。SQL关键字列表。