Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 数据库登录系统出现语法错误_Asp.net_Web Services_Syntax Error_Login Script - Fatal编程技术网

Asp.net 数据库登录系统出现语法错误

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 = ..... 但在这一点上,为什么在后续查询中使用

创建了一个网站登录系统,但当我运行它时,它不断出现这个错误,下面的特定代码位。有人能帮我处理这个特定代码的错误信息吗:

System.Data.SqlClient.SqlException:关键字附近的语法不正确 “用户”

代码:


这是因为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",
 ....