在c++的sqlite中验证用户的有效密码



我是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_v2sqlite3_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);

,现在问题解决了。由于

相关内容

最新更新