我是sqlite的新手,请帮我输出用户名和密码作为参数传递,我已经将密码存储在表名中的相应用户名为CREDENTIALS。如何检查密码是否有效? 感谢
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;
}
答案 0 :(得分:0)
如果我正确理解您的要求,您所要做的就是在凭证表上触发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
。
答案 1 :(得分:0)
我刚刚发现了函数中的问题:
iResult=sqlite3_prepare16_v2(db, insertQuery.str().c_str(), -1, &pSelectStatement, 0);
我刚将其改为:
iResult = sqlite3_prepare_v2(db, insertQuery.str().c_str(), -1, &pSelectStatement, 0);
现在问题解决了。 感谢