我有一个使用Python和pgdb访问的SQL数据库。我计划打开一组用户的访问权限,因此我希望合并一个登录函数,它接受用户名和密码,并根据用户的数据库信息进行检查。我没有那么多地使用Python,所以这花费了我相当长的时间,而且没有什么结果。我用PHP在上面找到了有用的线程,但不幸的是没有在Python中找到,所以我决定启动这个线程。
下面是我的密码。基本上,我想要一个登录函数,如果用户以给定的密码存在,则返回true。下面的代码没有响应。
我是否使用参数引用错误地设置了.execute?或者如果陈述错了?
def Login(username,password):
cursor.execute('select %s from db') % username
dbuser = cursor.fetchone()
if dbuser == username:
cursor.execute('select %s from db') % password
dbpass = cursor.fetchone()
if dbpass == password:
return "True"
else:
return "Password is incorrect."
else:
return "Username is incorrect."任何帮助都是非常感谢的!抱歉问这个新问题..。
发布于 2012-03-22 19:57:26
三件事。
首先,您使用的SQL没有任何意义。基本语法是select columns from table where stuff is true。您正在尝试select <a username> from table,其中的用户名应该是一个没有任何意义的列名。我猜你是想做更像select username from db where password=%s的事
第二,告诉用户用户名不存在,允许用户通过尝试和错误构建所有有效用户名的列表。相反,请笼统地告诉他们凭据不匹配,也不告诉他们哪一部分坏了。
第三,将用户输入(用户名和密码是输入的)直接嵌入到SQL中。请在SQL注入上阅读并使用参数化查询,以防止用户对您的站点做非常糟糕的事情。
编辑
最后一个考虑。这一切都意味着您要将密码以纯文本形式存储在表中。对密码哈希也做了一些研究。
发布于 2012-03-22 20:11:59
您正在尝试从数据库中选择一个COLUMN,该数据库等于传递给Login函数的username变量。
你的语法完全不正确。
阅读Select上的这 PostgreSQL链接以获得正确的语法。
本质上,您需要做的是从数据库中选择完整的列(按列名),并添加一个使用或匹配WHERE变量的username子句。
cursor.execute('SELECT username,password FROM db WHERE username=%s') % (username)
免责声明:免责声明上面提到的是防止注入的不安全代码。它只会帮助您理解要使用的正确语法,而不是当前的问题。
https://stackoverflow.com/questions/9829381
复制相似问题