Я потратил полдня на проверку, почему, обнаружил, что мой запрос возвращается в сообщении об ошибке (arr): bad parameter or other API misuse
Я попытался изменить запрос на: SELECT * FROM USERS;
, но он все равно дает:bad parameter or other API misuse
, и я проверил, если проблема в обратном вызове, sqlite даже не вызывает его.
bool IDatabase::checkIfLogged(std::string username, std::string password)
{
bool flag = false;
std::string query = "SELECT USERNAME FROM USERS WHERE USERNAME = '" + username + "' AND PASSWORD = '" + password + "';";
printf("\n%s\n", query.c_str());
int res;
char* arr = 0;
if (res = sqlite3_exec(db, query.c_str(), callbackexist, &flag, &arr) != SQLITE_OK) //throw std::exception(__FUNCTION__ " - checking isnt good");
printf("%s", sqlite3_errmsg(db));
printf("\n\n%d\n\n%s\n\n", res, arr);
return flag;
}
int IDatabase::callbackexist(void * data, int argc, char ** argv, char ** azColName)
{
bool* f = (bool*)data;
*f = argc > 1;
printf("\n");
for (int i = 0; i < argc; i++)
{
printf(azColName[i] + '\n');
printf(argv[i] + '\n');
}
printf("\n");
return 0;
}
Я за исключением того, что проблема в синтаксисе запроса и что я получу желаемыйвывод (true, если зарегистрировано, false, если нет)
Редактировать : проблема возникла из-за незарегистрированного доступа к базе данных, просто откройте базу данных в функции, а не в конструкторе классов, как я.