为什么在where子句中得到“unknown column'jacob'”?

p8h8hvxi  于 2021-06-15  发布在  Mysql
关注(0)|答案(3)|浏览(299)

**结案。**此问题不可复制或由打字错误引起。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

两年前关门了。
改进这个问题
我试着编写一段代码,从他的用户名中检索用户密码。
但是当我执行以下代码时,我得到了这个错误
“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')

编辑:格式化代码

xhv8bpkk

xhv8bpkk1#

你在找这样的人吗

def get_passwd(user_name):
user_passwd = mycursor.execute("SELECT passwd FROM users WHERE name LIKE '%s'"%user_name)
 print(user_passwd)

呼叫
获取密码('雅各布')
虽然这是容易攻击。

user_name = // assign your parameter in this variable
user_passwd = mycursor.execute('SELECT passwd FROM users WHERE name LIKE ?' ,user_name)
gfttwv5a

gfttwv5a2#

您需要在%s周围添加单引号

"SELECT passwd FROM users WHERE name LIKE ('%s')"
um6iljoc

um6iljoc3#

您没有正确地参数化查询,因此它将文本值传递给sql,而不是将其括在字符串引号中。也是 LIKE 值不需要用括号括起来。
使用execute方法的正确方法如下-将值作为参数传入,而不是执行字符串插值:

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')

注意username值现在是如何在前面加上 '%' 声明为字符串-因此在sql中形成包含通配符运算符的字符串,而不是python字符串连接运算符。
还要注意值不是如何插入到字符串中的,而是作为一个单独的参数传递给execute()方法的(部分),以便正确地参数化和转义-这样既有助于语法,也有助于处理sql注入的风险。
看到了吗https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html 更多细节。
p、 我想问你为什么要写一个方法来检索用户的密码…要有一个适当的安全环境,密码不能存储在纯文本中,而是单向散列,然后再也无法检索。要在登录期间检查密码的有效性,请使用相同的salt再次对密码进行哈希运算,并查看它是否与数据库版本匹配。如果用户忘记了他们的密码,写一个例程让他们重设密码,而不是找回密码。

相关问题