mysql_fetch_field_row Causing server to restart.
#1

For some reason, once I register I can play all day.
But as soon as I log out, and goto log back in, my server restarts.
It's only when I log in, never when I register.
It print's 'Login Function Variable Loading' but nothing after that so I assume it's dying at;
mysql_fetch_field_row(); I placed all the print's in there to see where it was dying at.

Using BlueG Plugin R5

pawn Код:
stock MySQL_Login(playerid)
{
    printf("Login stock loaded");
    new query[300], pname[24], savingstring[20];
    GetPlayerName(playerid, pname, 24);
    format(query, sizeof(query), "SELECT * FROM playerdata WHERE user = '%s'", pname);
    mysql_query(query);
    mysql_store_result();
    while(mysql_fetch_row_format(query,"|"))
    {
        printf("Login Function Variable Loading");
        mysql_fetch_field_row(savingstring, "score"); SetPlayerScore(playerid, strval(savingstring)); // THIS IS WHERE IT CRASHES AT.
        printf("Login Function Variable Loading - Score");
        mysql_fetch_field_row(savingstring, "money"); MoneyGiven[playerid] = strval(savingstring);
        printf("Login Function Variable Loading - Money");
    }
    mysql_free_result();
    SendClientMessage(playerid, -1, "You have been logged in!");
    Logged[playerid] = true;
    return 1;
}
REGISTER FUNCTION:
pawn Код:
stock MySQL_Register(playerid, passwordstring[])
{
    new query[200], pname[24], IP[16];
    GetPlayerName(playerid, pname, 24);
    GetPlayerIp(playerid, IP, 16);
    format(query, sizeof(query), "INSERT INTO playerdata (user, password, score, money, IP) VALUES('%s', SHA1('%s'), 0, 0, '%s')", pname, passwordstring, IP);
    mysql_query(query);

    SendClientMessage(playerid, -1, "You are now registerd, make sure to take a look at {F81414}(/rules) {FFFFFF}before proceeding.");
    Logged[playerid] = true;
    return 1;
}
REGISTER + LOGIN DIALOGS
pawn Код:
if(dialogid == DIALOG_REGISTER) // register dialog
    {
        if(response)
        {
            if(!(1 <= strlen(inputtext) <= 100))
            {
                SendClientMessage(playerid, -1, "You must insert a password between 1-100 characters!");
                ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Register","This account is unregistered.\nInput desired password below.","Register","Cancel");
            }
            else
            {
                new escpass[100];
                mysql_real_escape_string(inputtext, escpass);
                MySQL_Register(playerid, escpass);
            }
        }
        if(!response)
        {
                SendClientMessage(playerid, -1, "You may not proceed until you register your account in our system.");
                ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Register","This account is unregistered.\nInput desired password below.","Register","Cancel");
        }
    }
    if(dialogid == DIALOG_LOGIN) //Dialog login
    {
        if(!response)
        {
                SendClientMessage(playerid, -1, "Please login before proceeding.");
                ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login","This account is registered.\nPlease Login input your login credentials.","Login","Cancel");
        }
        else
        {
            new query[200], pname[24], escapepass[100]; //
            GetPlayerName(playerid, pname, 24);
            mysql_real_escape_string(inputtext, escapepass);
            format(query, sizeof(query), "SELECT `user` FROM playerdata WHERE user = '%s' AND password = SHA1('%s')", pname, escapepass);
            mysql_query(query);
            mysql_store_result();
            new numrows = mysql_num_rows();
            if(numrows == 1) MySQL_Login(playerid);

            if(!numrows)
            {
                ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login","This account is registered.\nPlease Login input your login credentials.","Login","Cancel");
                SendClientMessage(playerid, -1, "ERROR: Invalid password entry.");
            }
            mysql_free_result();
        }
    }
ONPLAYER DISCONNECT
pawn Код:
if(Logged[playerid] == true)
    {
        new query[200], pname[MAX_PLAYER_NAME];
        GetPlayerName(playerid, pname, sizeof(pname));
        format(query, sizeof(query), "UPDATE playerdata SET score=%d, money=%d WHERE user='%s'", GetPlayerScore(playerid), GetPlayerMoney(playerid), pname);
        mysql_query(query);

    }
ONPLAYERCONNECT
pawn Код:
MoneyGiven[playerid] = -1;
    new query[200], pname[24];
    GetPlayerName(playerid, pname, 24);
    format(query, sizeof(query), "SELECT IP FROM `playerdata` WHERE user = '%s' LIMIT 1", pname);
    mysql_query(query);
    mysql_store_result();
    if(!mysql_num_rows()) // or if(mysql_num_rows() == 0)
    {
        ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Register","This account is unregistered.\nInput desired password below.","Register","Cancel"); //Shows our register dialog :).
    }
    else
    {
 
        new IP[2][16];
        mysql_fetch_field_row(IP[0],"IP");
        GetPlayerIp(playerid, IP[1], 16);
        if(strlen(IP[0]) != 0 && !strcmp(IP[0], IP[1], true))
        {
            MySQL_Login(playerid);
        }
        else
        {
            ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login","This account is registered.\nPlease Login input your login credentials.","Login","Cancel"); //Shows our login dialog :).
            IsRegistered[playerid] = 1;
        }
    }
    mysql_free_result();
ONGAMEMODEINIT
pawn Код:
mysql_debug(1); // If there is a issue with SQL, this will report it.
    mysql_connect(mysql_host, mysql_user, mysql_database, mysql_password); // Connects to our Database
    mysql_query("CREATE TABLE IF NOT EXISTS playerdata(user VARCHAR(24), password VARCHAR(41), score INT(20), money INT(20), IP VARCHAR(16) )");
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)