我正在处理一个简单的登录,并有一个名为 Users 的表格。我正在尝试使用我的登录表单 POST 正文并在数据库中验证它。
来自表单的值:
user = request.form['username']
password = request.form['password']
SQL语句:
conn = sqlite3.connect(db)
cur = conn.cursor()
cur.execute("SELECT * FROM Users WHERE Username LIKE '(%s)'" % user)
row = cur.fetchone()
用户表:
所以在 POST
从我的表格请求,这是打印的内容:
Print(user, password) = ph104694 Password123
Print(row) = None
因此您可以看到该行返回为 None
当数据绝对存在时。如果我改变 user
对于我知道不正确的事情,我得到了相同的结果,但是如果我将表格从 Users
更改为类似于 Users2
我遇到了 no table exists
错误很好。因此,尽管存在匹配数据,但我的声明中的某些内容不允许它生成该行。有什么想法吗?
最佳答案
您正在搜索的表达式正在评估
(ph104694)
,这显然不存在于您显示的数据中。没有理由在这里使用 LIKE 运算符,它可能与您想要做的事情背道而驰(匹配与输入的用户 ID 完全匹配的单个记录)。
这是遭受 SQL 注入(inject)攻击的典型代码示例。您永远、永远、永远都不应该使用字符串插值来构建这样的 SQL 字符串。相反,使用参数替换。
综合起来,您想要这样的东西:
cur.execute("SELECT * FROM Users WHERE Username = ?", [user])
关于python - SQL 查询返回 "None"而不是行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53473365/