SQLite查询选择登录,来自用户的密码,其中login='login'返回错误结果

SQLite查询选择登录,来自用户的密码,其中login='login'返回错误结果,sql,sqlite,Sql,Sqlite,我有一个包含两个条目的用户表 id | login | password 0 | unauthorized user | pas 1 | login | hash 出于某种原因,查询SELECT login,password FROM user,其中login='login'返回两条记录。 请提供任何帮助。我假设您的查询实际上使用双引号作为字符串“login”而不是单引号,即您的查询实际上如下所示: SELECT login, password FROM user WHERE login

我有一个包含两个条目的用户表

id | login | password
0  | unauthorized user | pas
1  | login | hash
出于某种原因,查询SELECT login,password FROM user,其中login='login'返回两条记录。
请提供任何帮助。

我假设您的查询实际上使用双引号作为字符串“login”而不是单引号,即您的查询实际上如下所示:

SELECT login, password FROM user WHERE login = "login"
这将无法按预期工作。其他RDBMS经常偏离这一规则,例如MySQL使用'name'倒勾,T-SQL用于Sybase,MS SQL Server使用方括号[name],等等

更改查询以确保对值使用单引号,或者更好地使用参数化查询。您需要查看SQLite库的API文档,了解如何执行此操作,因为您尚未告诉我们您使用的库和语言:

SELECT login, password FROM user WHERE login = 'login'
或者,更清楚地说:

SELECT "login", "password" FROM "user" WHERE "login" = 'login'
我注意到,因为SQLite在proc中,没有内置的身份验证或授权,也就是说,它没有访问控制,但我觉得编写可移植SQL很重要,因为一个不断增长的项目几乎不可避免地会从SQLite迁移到客户端/服务器RDBMS,而客户端/服务器RDBMS将包含这些关键字,然后您的查询将中断有语法错误


另外,我相信您实际上并没有在该表中存储未加密甚至可逆加密的密码。如果您存储的是散列密码,那么您还应该存储一个salt值,如果您使用的是bcrypt之类的方案,则该值可能包含在存储的散列值中。

我假设您的查询实际上对字符串“login”使用了双引号,而不是单引号,即您的查询实际上如下所示:

SELECT login, password FROM user WHERE login = "login"
这将无法按预期工作。其他RDBMS经常偏离这一规则,例如MySQL使用'name'倒勾,T-SQL用于Sybase,MS SQL Server使用方括号[name],等等

更改查询以确保对值使用单引号,或者更好地使用参数化查询。您需要查看SQLite库的API文档,了解如何执行此操作,因为您尚未告诉我们您使用的库和语言:

SELECT login, password FROM user WHERE login = 'login'
或者,更清楚地说:

SELECT "login", "password" FROM "user" WHERE "login" = 'login'
我注意到,因为SQLite在proc中,没有内置的身份验证或授权,也就是说,它没有访问控制,但我觉得编写可移植SQL很重要,因为一个不断增长的项目几乎不可避免地会从SQLite迁移到客户端/服务器RDBMS,而客户端/服务器RDBMS将包含这些关键字,然后您的查询将中断有语法错误


另外,我相信您实际上并没有在该表中存储未加密甚至可逆加密的密码。如果您存储的是散列密码,那么您还应该存储一个salt值,如果您使用的是bcrypt之类的方案,则该值可能包含在存储的散列值中。

我的猜测是,login没有正确引用,因此login=login基本上是将列与自身进行比较,这总是正确的。插入用户名不等于任何列名的用户,例如foo,然后尝试对其进行查询。还可以按此处的代码格式粘贴查询。这将有助于分类。我的猜测是,login没有正确引用,所以login=login基本上是将列与自身进行比较,这总是正确的。插入用户名不等于任何列名的用户,例如foo,然后尝试对其进行查询。还可以按此处的代码格式粘贴查询。这将有助于分类。是的,它确实在引用中。多谢各位much@MyNick单引号还是双引号?是的,单引号是的,它真的是引号。多谢各位much@MyNick单引号还是双引号?是的,单引号