Witam otóż mam problem. Tworzę aplikację w C++, która będzie operować na bazie danych mysql i potrzebuje odczytać z niej pewne dane. Wiele szperałem po sieci i wszędzie napotykałem te samo rozwiązanie, które jednak u mnie nie chce działać.
Kod programu poniżej.
Mianowicie co chcę osiagnąć. Chcę wiedzieć, czy wydając zapytanie w funkcjach CheckUID i CheckNick istnieje coś w bazie o podanym UID/NICK (przykładowy kod jakim miałbym sprawdzać jest w CheckNick zakomentowany. Nie działa).
W funkcji Login zapytanie do bazy powoduje zwrot UID o podanym loginie i haśle. Niestety nie wiem jak się dobrać do tego. Wszelkie informacje mile widziane.
Uczę się tych wszystkich zapytań głównie ze stron anglojęzycznych dlatego nie wszystko jest jeszcze jasne.
#include "winlib.h"
using namespace std;
string databases::intToString(int number)
{
stringstream ss;
ss << number;
return ss.str();
}
int databases::CheckUID(int UID, MYSQL *base)
{
MYSQL_RES *result;
MYSQL_ROW row;
int num_fields=0;
char query[100]="";
strcat(query,"SELECT id FROM USERS where userid='");
string sUID=intToString(UID);
strcat(query, sUID.c_str());
strcat(query,"';");
cerr<<query <<endl;
cerr<<mysql_query(base,query);
cerr<<"\nZapytalo bazy\n";
result=mysql_store_result(base);
return num_fields;
}
int databases::CheckNick(char *nick, MYSQL *base)
{
MYSQL_RES *result;
MYSQL_ROW row;
int num_fields=0;
char query[100]="";
strcat(query+strlen(query),"SELECT id FROM USERS where userid='");
strcat(query+strlen(query),nick);
strcat(query+strlen(query),"';");
mysql_query(base, query);
result = mysql_store_result(base);
/*
num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result)))
{
for(int i = 0; i < num_fields; i++)
{
printf("%s ", row[i] ? row[i] : "NULL");
}
printf("\n");
}
mysql_free_result(result);*/
return 0;
}
int databases::CreateAccount(const char *login, const char *password, MYSQL *base)
{
/*
FILE*loginf;
loginf=fopen("log.temp", "at");
if(loginf==NULL)
{
cerr<<"Błąd pliku\n";
return 1;
}*/
mysql_select_db(base, "inote");
srand((int) time(NULL));
int userid=rand()%9999+1;
int x;
do{
x=CheckUID(userid, base);
}while(x!=0);
if(CheckNick((char*)(login), base)!=0)
{
WindowC::ShowInfoWindow(g_strdup("iNote - błąd tworzenia konta"), g_strdup("Błąd. Konto nie zostało stworzone. Istnieje użytkownik o takim nicku"));
return 1;
}
/*fprintf(loginf, "%s\t %s\t %i\n", login, password, userid);
fclose(loginf);*/
char query[100];
strcat(query, "INSERT INTO users(nick, password, userid) values('");
strcat(query, login);
strcat(query, "','");
strcat(query, password);
strcat(query, "','");
string UID=intToString(userid);
strcat(query,UID.c_str());
strcat(query, "');");
if(mysql_query(base, query))
{
WindowC::ShowInfoWindow(g_strdup("iNote - błąd tworzenia konta"), g_strdup("Błąd. Konto nie zostało stworzone. Skontaktuj się z administratorem"));
}
return 0;
}
int databases::Login(const char *nick, const char *password, MYSQL *base)
{
MYSQL_RES *result;
MYSQL_ROW row;
MYSQL_FIELD *field;
char query[100];
strcat(query,"SELECT id FROM users WHERE nick='");
strcat(query, nick);
strcat(query,"' and password='");
strcat(query, password);
strcat(query, "';");
mysql_query(base, query);
result=mysql_store_result(base);
field = mysql_fetch_field(result);
cerr<<field->name <<endl;
mysql_free_result(result);
return 0;
}
Z góry dziękuję i pozdrawiam.