C# “错误”;检查与您的MySQL服务器版本对应的手册;

C# “错误”;检查与您的MySQL服务器版本对应的手册;,c#,mysql,C#,Mysql,你好,我的代码有点问题。。我得到这个错误,这取决于 myReader = SelectCommand.ExecuteReader(); 我真的不明白 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“密码”附近使用的正确语法 您有间距问题,缺少一个列名: MySqlCommand SelectCommand = new MySqlCommand("SELECT * FROM userspassword where username='"

你好,我的代码有点问题。。我得到这个错误,这取决于

myReader =  SelectCommand.ExecuteReader();
我真的不明白

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“密码”附近使用的正确语法


您有间距问题,缺少一个列名:

MySqlCommand SelectCommand = 
    new MySqlCommand("SELECT * FROM userspassword where username='" 
                     + this.loginuser.Text + "' and password='" 
                     + this.passworduser.Text +"'", conn);

顺便说一句-此处可能存在SQL注入问题

缺少供用户比较的字段名

 MySqlCommand SelectCommand = new MySqlCommand("SELECT * FROM userspassword where " +  
        "username = '" + this.loginuser.Text + "' and password = '" + 
         this.passworduser.Text +"'" , conn);
以及字段、值和右引号之间的一些空格

让我告诉你字符串连接的危险。如果其中一个文本框包含一个引号,则该命令将因语法错误而失败,或者,如果您有恶意用户,他/她可能准备在输入框中插入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关键字命名列<代码>键和
索引
是最有可能的

嘿,感谢您的快速响应,我应用了您的解决方案,但仍然存在SQL语法错误,这是wierd。我的数据库方案有问题吗?您是否更正了字符串“and password=@pwd”?请重新加载页面如果您需要添加+号,是。否,我是指密码和参数之间的=号。错误消息仍然是相同的吗?我的意思是指向“密码”这个词?我已经让它工作了,我的数据库出了问题。谢谢你的帮助!
MySqlCommand SelectCommand = new MySqlCommand("SELECT * FROM userspassword where " + "YourColumnName = '" + this.loginuser.Text + "' and password '" + this.passworduser.Text +"'" , conn);