在c++的sqlite中验证用户的有效密码
authenticate user for valid password in sqlite in c++
我是sqlite的新手,请帮助我解决用户名和密码作为参数传递的问题,并且我已经将密码存储到表名中对应的用户名中作为凭据。如何检查密码是否有效?由于
bool authenticateUser(string USER, string PASS)
{
sqlite3_stmt *pSelectStatement = NULL;
int iResult = SQLITE_ERROR;
bool ret = true;
insertQuery<<"SELECT * FROM CREDENTIALS WHERE USERID LIKE '"<<USER<<"' AND PASSWORD LIKE '"<<PASS<<"';";
iResult = sqlite3_prepare16_v2(db, insertQuery.str().c_str(), -1, &pSelectStatement, 0);
if ((iResult == SQLITE_OK) && (pSelectStatement != NULL))
{
iResult = sqlite3_step(pSelectStatement);
//was found?
if (iResult == SQLITE_DONE) {
ret = false;
sqlite3_clear_bindings(pSelectStatement);
sqlite3_reset(pSelectStatement);
}
iResult = sqlite3_finalize(pSelectStatement);
}
return ret;
}
如果我正确理解了您的需求,那么您所要做的就是在凭据表上触发select count
查询,然后评估结果。如果计数为0,则密码或用户id错误。如果它大于0(理想情况下等于1),则凭证有效。
看下面的操作是否正常:
insertQuery<<"SELECT COUNT(1) FROM CREDENTIALS WHERE USERID LIKE '"<<USER<<"' AND PASSWORD LIKE '"<<PASS<<"';";
然后拨打sqlite3_prepare16_v2
和sqlite3_step
,就像你已经做的那样。然后调用sqlite3_column_int
来获取值。接下来对sqlite3_step
的调用将返回SQLITE_DONE
。
我刚刚找出了函数中的问题:
iResult=sqlite3_prepare16_v2(db, insertQuery.str().c_str(), -1, &pSelectStatement, 0);
我只是把它改成:
iResult = sqlite3_prepare_v2(db, insertQuery.str().c_str(), -1, &pSelectStatement, 0);
,现在问题解决了。由于
相关文章:
- 欧拉项目#8答案是大以获得有效答案
- 如何检查用户的输入是否有效以及我正在寻找的数字?
- 如果不有效,如何重复用户输入电子邮件
- 尝试获取用户输入和cout消息期望,当我输入一个有效名称时,它将所有这些命名
- 测试用户输入数组中的重复项的最有效方法是什么?
- 验证用户输入是否有效 [从 'char' 到 'char*' 的转换无效]
- 正在检查用户的有效输入并与文本文件进行比较
- 保存“编辑控件”用户输入并在应用程序重新启动C++Visual Studio时进行恢复的有效方法
- 有效用户输入c++的循环
- 如何检查用户是否输入了有效值
- 使用UTC来回转换日期以忽略DST但仍使用当前用户的有效区域设置是否安全
- C++正在检查用户是否输入了有效答案
- 如何处理pam_authenticate对有效用户和密码的PAM_AUTHTOK_RECOVERY_ERR返回值
- 在c++的sqlite中验证用户的有效密码
- 更有效地使用根据用户输入决定获胜者的函数
- 如何检查用户的输入是否有效?(C++)
- c++有效地从用户定义结构的向量中提取子集
- 货币选择有效,除非用户选择欧元或'e'
- 试图创建一个程序来读取用户输入,然后将数组分解为单独的单词,我的指针都有效吗
- Lua 中具有大量用户数据的有效垃圾回收