我花了半天时间检查原因,发现我的查询返回错误消息(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)
编辑:问题来自未注册的对数据库的访问,仅在函数中打开数据库,而不是在像我这样的类构造函数中打开数据库。