Python开发登录功能时,查询MySQL匹配用户名密码的行失败求助
登录查询代码问题分析与修正
核心问题拆解
- SQL语法错误:WHERE子句不能用逗号分隔条件,必须用
AND连接;登录验证属于精确匹配场景,不该用模糊查询的LIKE,要用精确匹配的=,原语句的写法数据库无法识别。 - SQL注入高危风险:直接用
%拼接字符串生成SQL是严重的安全漏洞,恶意用户可通过构造特殊输入篡改SQL逻辑,窃取或破坏数据库数据。 - Python语法错误:
print语句没有缩进,不符合Python代码块的缩进规则,会直接触发语法报错。
修正后的代码
# 使用参数化查询避免注入,同时修正SQL语法 cursor.execute("SELECT * FROM user WHERE username = %s AND password = %s", (username, password)) ecreds = cursor.fetchone() # 用户名唯一,用fetchone比fetchall更高效 if ecreds: print(f"Login successful. Welcome, {ecreds[0]}") # 根据你的user表结构,调整用户名对应的列索引
重要额外提醒
绝对不要明文存储用户密码!必须用bcrypt、passlib这类专业库对密码做哈希处理后再存入数据库,验证时对用户输入的密码重新哈希,再和数据库中的哈希值对比,这是登录功能的基本安全要求。
内容的提问来源于stack exchange,提问作者Invictus
相关产品推荐
相关产品推荐

