Python检查SQLite3数据库多字段匹配:登录验证始终返回成功
登录验证始终提示成功的修复方案
问题根源
当前代码的判断逻辑完全错误——它只是检查预先定义的SQL语句字符串sqlstring是否不为None,而这个字符串是写死的常量,永远不会为空,所以不管数据库里有没有匹配的用户,都会直接输出成功提示,完全没有用到数据库的查询结果。
修正后的代码
假设你的runsql函数执行查询后会返回查询到的记录列表,修正代码如下:
def check_data_with_tbl(packet): # 接收客户端发送的数据包,与数据库字段比对 sqlstring = """ SELECT * FROM tblUserDetails WHERE Username = ? AND PasswordHash = ? """ # 先绑定参数并执行数据库查询 values = (packet['username'], packet['password']) query_result = runsql(sqlstring, values) # 根据查询结果判断验证状态 if query_result and len(query_result) > 0: print("验证有效") else: print("输入错误:用户名或密码不正确")
如果你的runsql函数返回的是游标对象,可改用以下写法:
def check_data_with_tbl(packet): # 接收客户端发送的数据包,与数据库字段比对 sqlstring = """ SELECT * FROM tblUserDetails WHERE Username = ? AND PasswordHash = ? """ values = (packet['username'], packet['password']) cursor = runsql(sqlstring, values) # 获取第一条匹配记录,无匹配则返回None matched_user = cursor.fetchone() if matched_user: print("验证有效") else: print("输入错误:用户名或密码不正确")
关键修正点
- 调整执行顺序:必须先执行SQL查询获取结果,再进行判断,而不是先判断SQL语句本身。
- 基于查询结果判断:通过检查是否存在匹配的用户记录来决定输出提示,真正实现了“输入与数据库值比对”的需求。
- 适配
runsql函数:确保你的runsql函数能正确执行查询并返回可用结果(记录列表或游标),如果它原本只支持增删改操作,需要修改使其支持查询返回。
内容的提问来源于stack exchange,提问作者Bitmap
相关产品推荐
相关产品推荐

