SQLite makes server.exe crash when reading data.
#1

Hi

I decided to switch to SQLite for saving stats, because everyone says that along with MYSql it's the best option.

So I watched several tutorials, and finally tried it out myself.
The registering works fine, but when I reconnect to the server and try to login it crashes my server.exe and the server closes connection :/

So here's my code:

pawn Код:
public OnPlayerRequestClass(playerid, classid) //•••
{
    new  Query[135], DBResult:conclusion , PlayerName[MAX_PLAYER_NAME] ;
    GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
    format(Query, sizeof(Query), "SELECT `NAME` FROM `USERS` WHERE `NAME` = '%s' COLLATE NOCASE", DB_Escape(PlayerName));
    conclusion = db_query(Admin, Query);
    if(db_num_rows(conclusion ))//if he is registered
    {
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Welcome back to the server! \nEnter your password:", "Login", "");
    }
    else
    {//else if not
        ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Register", "Enter your password:", "Register", "");
    }
    db_free_result(conclusion);
   
    if(PInfo[playerid][Logged] == 1) SpawnPlayer(playerid);

    return 1;
}//•••
OnDialogResponse:
pawn Код:
if(dialogid == DIALOG_REGISTER) //•••
    {
        if(PInfo[playerid][Logged] == 1) return SendClientMessage(playerid,COLOR_WHITE,"You are already logged in!");//Checking if the player is logged in, if he is, it won't allow him to re-register
        if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Register", "Password invalid, Enter your password:", "Register", "");

        new Query[128];
        new PlayerName[MAX_PLAYER_NAME];

        GetPlayerName(playerid, PlayerName, MAX_PLAYER_NAME);
        format(Query, 128, "INSERT INTO `USERS` (`NAME`, `PASSWORD`) VALUES ('%s','%s')", DB_Escape(PlayerName), DB_Escape(inputtext));//we are saving the fields values inside our DataBase
        db_query(Admin, Query);

    }
   
    if(dialogid == DIALOG_LOGIN)
    {
        if(PInfo[playerid][Logged] == 1) return SendClientMessage(playerid,COLOR_WHITE,"You are already logged in!");//Checking if the player is logged in, if he is, it won't allow him to login
        if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Password invalid, Enter your password:", "Login", "");
       
        //Login(playerid, inputtext);
        new Query[128];
        new PlayerName[MAX_PLAYER_NAME];
        new DBResult: Result;

        GetPlayerName(playerid, PlayerName, MAX_PLAYER_NAME);
        format(Query, sizeof(Query), "SELECT * FROM `USERS` WHERE `NAME` = '%s' COLLATE NOCASE AND `PASSWORD` = '%s'", DB_Escape(PlayerName), DB_Escape(inputtext));
        Result = db_query(Admin, Query);
        if(db_num_rows(Result))//if password is right
        {
               
            new money[30], level[2], score[30], kills[10], skin[5], rep[10], deaths[10], vortexPB[30], houses[5], racesWon[5], racesRaced[6];
           
            db_get_field_assoc(Result, "MONEY", money, 30);
            PInfo[playerid][Money] = strval(money);
               
            db_get_field_assoc(Result, "LEVEL", level, 2);
            PInfo[playerid][Level] = strval(level);
               
            db_get_field_assoc(Result, "SCORE", score, 30);
            PInfo[playerid][Score] = strval(score);
               
            db_get_field_assoc(Result, "KILLS", kills, 10);
            PInfo[playerid][Kills] = strval(kills);
               
            db_get_field_assoc(Result, "SKIN", skin, 5);
            PInfo[playerid][Skin] = strval(skin);
               
            db_get_field_assoc(Result, "REPUTATION", rep, 10);
            PInfo[playerid][Rep] = strval(rep);
               
            db_get_field_assoc(Result, "DEATHS", deaths, 10);
            PInfo[playerid][Deaths] = strval(deaths);
               
            db_get_field_assoc(Result, "VORTEXPB", vortexPB, 30);
            PInfo[playerid][VortexPB] = floatstr(vortexPB);
               
            db_get_field_assoc(Result, "HOUSES", houses, 5);
            PInfo[playerid][Houses] = strval(houses);
               
            db_get_field_assoc(Result, "RACESWON", racesWon, 5);
            PInfo[playerid][RacesWon] = strval(racesWon);
               
            db_get_field_assoc(Result, "RACESRACED", racesRaced, 6);
            PInfo[playerid][RacesRaced] = strval(racesRaced);
        }
       
        else
        {//else he entered a wrong password
            ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Password invalid, Enter your password:", "Login", "");//Checking if he inputted the correct password, if not, retrieve him a message and closing the file;
        }
        db_free_result(Result);
        //Other stuff

    } //•••
Custom function (which doesn't cause any trouble, but I'll post it here anyway, just in case:
pawn Код:
//•••
forward public UpdateData(playerid);
public UpdateData(playerid)
{
    new
        Query[200],
        name[MAX_PLAYER_NAME]
    ;
    GetPlayerName(playerid, name, sizeof(name));
   
    format(Query,sizeof(Query),"UPDATE `USERS` SET  MONEY = '%d' WHERE `NAME` = '%s' COLLATE NOCASE",  GetPlayerMoney(playerid), DB_Escape(name));
    db_free_result(db_query(Admin, Query));
   
    format(Query,sizeof(Query),"UPDATE `USERS` SET  SCORE = '%d' WHERE `NAME` = '%s' COLLATE NOCASE",  GetPlayerMoney(playerid), DB_Escape(name));
    db_free_result(db_query(Admin, Query));
   
    format(Query,sizeof(Query),"UPDATE `USERS` SET  SKIN = '%d' WHERE `NAME` = '%s' COLLATE NOCASE",  GetPlayerMoney(playerid), DB_Escape(name));
    db_free_result(db_query(Admin, Query));
   
    format(Query,sizeof(Query),"UPDATE `USERS` SET  COLOR = '%d' WHERE `NAME` = '%s' COLLATE NOCASE",  GetPlayerMoney(playerid), DB_Escape(name));
    db_free_result(db_query(Admin, Query));
   
    format(Query,sizeof(Query),"UPDATE `USERS` SET  KILLS = '%d' WHERE `NAME` = '%s' COLLATE NOCASE",  GetPlayerMoney(playerid), DB_Escape(name));
    db_free_result(db_query(Admin, Query));
   
    format(Query,sizeof(Query),"UPDATE `USERS` SET  REPUTATION = '%d' WHERE `NAME` = '%s' COLLATE NOCASE",  GetPlayerMoney(playerid), DB_Escape(name));
    db_free_result(db_query(Admin, Query));

    format(Query,sizeof(Query),"UPDATE `USERS` SET  DEATHS = '%d' WHERE `NAME` = '%s' COLLATE NOCASE",  GetPlayerMoney(playerid), DB_Escape(name));
    db_free_result(db_query(Admin, Query));

    format(Query,sizeof(Query),"UPDATE `USERS` SET  VORTEXPB = '%d' WHERE `NAME` = '%s' COLLATE NOCASE",  GetPlayerMoney(playerid), DB_Escape(name));
    db_free_result(db_query(Admin, Query));

    format(Query,sizeof(Query),"UPDATE `USERS` SET  HOUSES = '%d' WHERE `NAME` = '%s' COLLATE NOCASE",  GetPlayerMoney(playerid), DB_Escape(name));
    db_free_result(db_query(Admin, Query));

    format(Query,sizeof(Query),"UPDATE `USERS` SET  RACESWON = '%d' WHERE `NAME` = '%s' COLLATE NOCASE",  GetPlayerMoney(playerid), DB_Escape(name));
    db_free_result(db_query(Admin, Query));
   
    format(Query,sizeof(Query),"UPDATE `USERS` SET  RACESRACED = '%d' WHERE `NAME` = '%s' COLLATE NOCASE",  GetPlayerMoney(playerid), DB_Escape(name));
    db_free_result(db_query(Admin, Query));
   
    return 1;
}
Does anybody know what could be wrong?
Thanks in advance
Rep ++
Reply


Messages In This Thread

Forum Jump:


Users browsing this thread: 1 Guest(s)