SQLite用户名存在性校验函数异常排查与修正需求
问题与修复方案
问题分析
当前checkDB函数无法在用户名不存在时返回True,核心原因是SQL语句的参数绑定语法错误:代码中用[username]作为变量占位符,不符合SQLite的语法规范,数据库会把[username]当成固定字符串去匹配,而非传入的实际用户名参数,导致查询逻辑完全失效。
修复后的代码
def checkDB(username): # 使用SQLite标准的?占位符绑定参数,避免语法错误与SQL注入风险 c.execute('select exists(select 1 from LoginCredentials where username = ?)', (username,)) exists = c.fetchone()[0] # 提取查询结果的布尔值 if exists: print("False") return False # 用户名已存在,返回False else: print("True") return True # 用户名不存在,返回True
关键修改说明
- 替换SQL占位符:将
[username]改为SQLite标准的?,同时在execute方法的第二个参数中传入包含用户名的元组(username,),实现参数的正确传递。 - 优化结果取值:
c.fetchone()返回包含结果的元组,直接通过[0]提取布尔值,逻辑更直观。
内容的提问来源于stack exchange,提问作者Curtis Greenwood
相关产品推荐
相关产品推荐

