**结案。**此问题不可复制或由打字错误引起。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
两年前关门了。
改进这个问题
我试着编写一段代码,从他的用户名中检索用户密码。
但是当我执行以下代码时,我得到了这个错误
“where子句中的未知列'jacob'”
我的用户表:https://gyazo.com/c3f9aff0e0ceea9be39ba51c4a8680f3
def get_passwd(user_name):
user_passwd = mycursor.execute("SELECT passwd FROM users WHERE name LIKE (%s)"%(user_name))
print(user_passwd)
get_passwd('Jacob')
编辑:格式化代码
3条答案
按热度按时间7vhp5slm1#
您没有正确地参数化查询,因此它将文本值传递给sql,而不是将其括在字符串引号中。也是
LIKE
值不需要用括号括起来。使用execute方法的正确方法如下-将值作为参数传入,而不是执行字符串插值:
注意username值现在是如何在前面加上
'%'
声明为字符串-因此在sql中形成包含通配符运算符的字符串,而不是python字符串连接运算符。还要注意值不是如何插入到字符串中的,而是作为一个单独的参数传递给execute()方法的(部分),以便正确地参数化和转义-这样既有助于语法,也有助于处理sql注入的风险。
看到了吗https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html 更多细节。
p、 我想问你为什么要写一个方法来检索用户的密码…要有一个适当的安全环境,密码不能存储在纯文本中,而是单向散列,然后再也无法检索。要在登录期间检查密码的有效性,请使用相同的salt再次对密码进行哈希运算,并查看它是否与数据库版本匹配。如果用户忘记了他们的密码,写一个例程让他们重设密码,而不是找回密码。
jxct1oxe2#
您需要在%s周围添加单引号
f2uvfpb93#
你在找这样的人吗
呼叫
获取密码('雅各布')
虽然这是容易攻击。