如何从SQLite数据库检索数据并赋值给变量?含SQL语句使用疑问
如何从SQLite检索数据并完成密码校验?
嘿,我来帮你搞定这个问题!首先得提个关键问题:你原来写的SQL语句有严重的SQL注入风险——直接把用户输入的用户名拼进SQL里,要是有人在用户名框输入' OR 1=1--这种恶意内容,分分钟就能绕过校验甚至篡改数据库。所以咱们先从安全的参数化查询开始,一步步来。
第一步:安全执行SQL并获取存储的密码
假设你用的是VB.NET(从txtUsername.Text的写法看大概率是WinForms项目),并且已经引用了System.Data.SQLite库,下面是完整的代码示例,我会逐行说明:
' 定义变量存储从数据库拿到的密码 Dim storedPassword As String = Nothing ' 替换成你的SQLite数据库文件路径 Dim dbFilePath As String = "Data\YourDatabase.db" ' Using语句会自动释放连接和命令资源,避免内存泄漏,这是最佳实践 Using conn As New SQLiteConnection($"Data Source={dbFilePath};Version=3;") conn.Open() ' 用参数化SQL代替直接拼接,@username是参数占位符 Dim query As String = "SELECT login_password FROM Login WHERE login_username = @username;" Using cmd As New SQLiteCommand(query, conn) ' 给参数赋值,这里传入用户输入的用户名(记得Trim去掉前后空格) cmd.Parameters.AddWithValue("@username", txtUsername.Text.Trim()) ' ExecuteScalar用于获取单个结果(因为用户名应该是唯一的,只会返回一条密码) Dim queryResult As Object = cmd.ExecuteScalar() ' 检查结果是否为空,如果有数据就转成字符串赋值给变量 If queryResult IsNot DBNull.Value Then storedPassword = queryResult.ToString() End If End Using End Using
第二步:和文本框内容做交叉校验
拿到storedPassword之后,就可以和密码框里的内容对比了。这里要提醒一句:生产环境绝对不要明文存储密码!如果你的数据库里存的是明文,强烈建议改成存储加盐哈希后的密码(比如用BCrypt算法),验证时哈希用户输入的密码再对比。不过如果是临时测试需求,基础校验代码如下:
' 获取用户输入的密码 Dim inputPassword As String = txtPassword.Text.Trim() ' 校验逻辑:先判断数据库有没有查到对应密码,再对比内容 If Not String.IsNullOrEmpty(storedPassword) AndAlso storedPassword = inputPassword Then MessageBox.Show("登录成功!") ' 这里可以加跳转主界面的逻辑 Else MessageBox.Show("用户名或密码错误,请重试!") End If
额外注意事项
- 确保你的
Login表中login_username字段是唯一约束,这样不会出现多个密码结果的情况 - 永远不要用字符串拼接的方式写SQL,参数化查询是防注入和避免语法错误的核心
- 密码哈希是必须的安全措施,明文存储密码是非常危险的行为,哪怕是小型项目也别这么做
内容的提问来源于stack exchange,提问作者Lina Avbelj
相关产品推荐
相关产品推荐

