我是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);
,现在问题解决了。由于