Asp.net 数据库登录系统出现语法错误
创建了一个网站登录系统,但当我运行它时,它不断出现这个错误,下面的特定代码位。有人能帮我处理这个特定代码的错误信息吗: System.Data.SqlClient.SqlException:关键字附近的语法不正确 “用户” 代码:Asp.net 数据库登录系统出现语法错误,asp.net,web-services,syntax-error,login-script,Asp.net,Web Services,Syntax Error,Login Script,创建了一个网站登录系统,但当我运行它时,它不断出现这个错误,下面的特定代码位。有人能帮我处理这个特定代码的错误信息吗: System.Data.SqlClient.SqlException:关键字附近的语法不正确 “用户” 代码: 这是因为USER是保留关键字。要在查询中引用它,需要将单词封装在方括号中 string query = string.Format("SELECT COUNT(*) FROM [user] WHERE name = ..... 但在这一点上,为什么在后续查询中使用
这是因为USER是保留关键字。要在查询中引用它,需要将单词封装在方括号中
string query = string.Format("SELECT COUNT(*) FROM [user] WHERE name = .....
但在这一点上,为什么在后续查询中使用名称users
?这只是第一个查询中的输入错误,还是下一个查询中的输入错误
但是,您还应该记住,以这种方式设置查询的字符串格式是非常糟糕的。您有Sql注入的风险,如果文本值中出现一个引号,整个查询将导致无效语法 作为替换查询的参数化查询的示例
string query = "SELECT COUNT(*) FROM [user] WHERE name = @name",
command.CommandText = query;
command.Parameters.AddWithValue("@name",login);
int amountOfUsers = (Convert.ToInt32(command.ExecuteScalar());
if(amountOfUsers > 0)
{
.....
}
然后,下一个问题是从数据库检索的密码,并与用户输入进行比较。拥有这种代码意味着密码以明文形式存储在数据库中。明显的安全风险。您应该以加密的形式存储密码。当需要检查用户凭据时,可以对用户输入应用相同的加密算法,并根据数据库中的密码进行检查
您可以在一次操作中完成此操作
string cryptPwd = EncryptPassword(password);
string query = "SELECT COUNT(*) FROM [user] WHERE name = @name and password = @cryptpwd",
....
您的表可能命名为“users”,而不是“user”。此外,您应该参数化SQL命令,因为SQL注入的风险很大。此外,请查看类似于BCrypt的内容,并对您的密码进行哈希运算;不要用明文存储它们!好的,干杯,所以你认为如果我把用户换成用户,它应该会工作,谢谢你的反馈,我非常感谢。我对这个也很陌生,所以我不知道你说的“盐”是什么意思。我的密码很感谢你,我有点拼写错误!谢谢你注意到了!你应该扔掉上面所有的代码。了解SQL注入和密码哈希,然后重试。这是你网站的一个重要部分,你应该把它做好。当一个就足够的时候,你也会打3个数据库调用。让它工作起来了非常感谢你的评论,事实上这并不是错误,上面的那个家伙就做到了!
string cryptPwd = EncryptPassword(password);
string query = "SELECT COUNT(*) FROM [user] WHERE name = @name and password = @cryptpwd",
....