我正在使用C#和MySQL实现登录表单,用户应输入他/她的用户名和密码,然后选择他/她是学生,教师还是管理员。 然后我要检查输入的值是否正确,这是我的代码:
connection.Open();
MySqlCommand cmd = new MySqlCommand();
cmd.CommandText = "Select * from @userType where username=@user and password=@pass";
cmd.Parameters.AddWithValue("@userType", userType);
cmd.Parameters.AddWithValue("@user", user);
cmd.Parameters.AddWithValue("@pass", pass);
cmd.Connection = connection;
MySqlDataReader login = cmd.ExecuteReader();
但是查询没有成功! 错误消息:
MySql.Data.MySqlClient.MySqlException,HResult = 0x80004005, Message =您的SQL语法有误;检查手册 对应于您的MySQL服务器版本以使用正确的语法 靠近“学生”,其中用户名=“ noor123”,密码=“ 123456” 行Source = MySql.Data
错误是什么?
答案 0 :(得分:2)
该代码生成的SQL查询为:
Select * from 'student' where username="noor123" and password="123456"
该表不能放在''
内,因为这不是正确的SQL语法。
您不能使用参数作为表名,而是这样做,这样就不会为表名获得''
:
connection.Open();
MySqlCommand cmd = new MySqlCommand();
cmd.CommandText = "Select * from " + userType.ToString() + " where username=@user and password=@pass";
cmd.Parameters.AddWithValue("@user", user);
cmd.Parameters.AddWithValue("@pass", pass);
cmd.Connection = connection;
MySqlDataReader login = cmd.ExecuteReader();
答案 1 :(得分:0)
如果这只是一项任务,而不是实际程序,请执行以下操作。
06
cmd.CommandText = $"Select * from {userType} where username=@user and password=@pass";
我认为这应该有所帮助。我没有检查自己。
但是,在现实世界中,您不应该这样编程。在处理身份验证/授权时,有许多安全注意事项,但没有提及sql注入的可能性。如果这是一个真实的项目,那么我建议您阅读有关该主题的适当材料。