为了账号安全,请及时绑定邮箱和手机立即绑定

不知道sql语法有什么错误

不知道sql语法有什么错误

C#
芜湖不芜 2022-11-22 16:06:44

我正在使用 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 服务器版本相对应的手册,了解在“student”附近使用的正确语法,其中用户名='noor123' 和密码='123456'' 在 Source=MySql.Data 行


错误是什么?


查看完整描述

2 回答

?
四季花海

TA贡献1519条经验 获得超5个赞

该代码生成的 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();


查看完整回答
反对 回复 6天前
?
catspeake

TA贡献809条经验 获得超0个赞

如果这只是一个作业而不是真实世界的程序,那么请执行以下操作。

  1. 确保变量 userType、user 和 pass 是 String 类型。

  2. 确保 userType 表示语法正确的表或视图名称。

  3. 更新这一行cmd.CommandText = $"Select * from {userType} where username=@user and password=@pass";

  4. 删除此行cmd.Parameters.AddWithValue("@userType", userType);

我相信这应该有所帮助。我没有检查自己。

然而在现实世界中你不应该这样编程。在处理身份验证/授权时有许多安全考虑因素,更不用说 sql 注入的可能性了。如果这是一个真实的项目,那么我建议您阅读有关该主题的适当材料。


查看完整回答
反对 回复 6天前
  • 2 回答
  • 0 关注
  • 7 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信