You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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("输入错误:用户名或密码不正确")

关键修正点

  1. 调整执行顺序:必须先执行SQL查询获取结果,再进行判断,而不是先判断SQL语句本身。
  2. 基于查询结果判断:通过检查是否存在匹配的用户记录来决定输出提示,真正实现了“输入与数据库值比对”的需求。
  3. 适配runsql函数:确保你的runsql函数能正确执行查询并返回可用结果(记录列表或游标),如果它原本只支持增删改操作,需要修改使其支持查询返回。

内容的提问来源于stack exchange,提问作者Bitmap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:16:02