Сравнение двух результатов в SQLite для C ?

#c #sqlite

Вопрос:

Я пытаюсь написать функцию входа в систему на C , где пользователь вводит свой идентификатор. Этот идентификатор входит в запрос API SQLite, и я хотел бы сохранить результат запроса (то, что должно быть паролем) в переменной. А также пользователь вводит свой пароль, и я хотел бы сравнить введенный пароль и фактический пароль. Проблема в том, что фактический пароль, результат запроса-это постоянный символ без знака*, а введенный пароль, очевидно, является строкой. Насколько я знаю, я не могу преобразовать строку в символ const без знака или наоборот. Ниже приведен код, вот где я сейчас нахожусь. Есть ли какой-нибудь способ сравнить два пароля?

 string studentid;
sqlite3* db;
sqlite3_stmt* stmt;
auto rc = sqlite3_open("timetable_newest.sqlite", amp;db);
if (rc != SQLITE_OK)
{
    cerr << "Couldn't open database" << sqlite3_errmsg(db);
    sqlite3_close(db);
    exit(EXIT_FAILURE);
}
cout << "Enter your student ID: " << endl;
cin >> studentid;
string select = "SELECT password FROM Student_login WHERE id='"   studentid   "'";
sqlite3_prepare_v2(db, select.c_str(), -1, amp;stmt, 0);
const unsigned char* password; //has to be const unsigned char*, unless it won't compile
password = sqlite3_column_text(stmt, 1);
cout << "Enter your password" << endl;
string password_input;
cin >> password_input; //this is where I am now, the solution should start from here
 

Извините, если вопрос глупый, или я не вижу очевидной вещи, я довольно новичок в c . Заранее благодарю вас!

Комментарии:

1. Вы можете сравнить (содержимое строки) std::string с const char* ( password == password_input ).

2. Кстати, лучше хранить пароль не в БД, а в каком-нибудь «хэше».

3. Ваш код подвергается SQL-инъекции ! Представьте, что ваш пользователь вводит что-то вроде foo' or 1=1 --

4. xkcd.com/327

5. В качестве полностью альтернативного подхода, почему бы не позволить SQLite выполнить тяжелую работу и проверить, существует ли пользователь с правильным (хэшированным) паролем? Затем вам просто нужно подсчитать количество строк результатов.