2016-11-03 7 views
0

sqliteの新機能です。ユーザー名とパスワードが引数として渡され、対応するユーザー名にCREDENTIALSというパスワードが既に格納されています。パスワードが有効かどうかを確認するには?私が正しくあなたの条件を理解していれば おかげsqliteで有効なパスワードをC++で認証する

 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

「USERID」列はどのような種類ですか?また、データベースにあるパスワードを保存したくない場合もあります。この記事を読むhttp://stackoverflow.com/questions/1054022/best-way-to-store-password-in-database – Valentin

答えて

0

、あなたがしなければならないすべては、資格情報のテーブルの上に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を返します。

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); 

、今問題が解決されます。 ありがとう

関連する問題