[HELP] MySQL dont save data on OnUpdatePlayer
#1

Hello all.

My GameMode (PEN Based) have a little problem on saving data on OnUpdatePlayer...
It do all right: Checking if account exist or not, creating accounts, reading the data from the DB In-Game.
But When i try to... send data ingame(onupdateplayer) to the DB it does... nothing.

I Need Help, I Have tryed to fix it... everything sounds right but it still dont save data.


My Code:

pawn Код:
/* Includes */
#include <a_mysql>

/* Defines */
#define MYSQL_HOST "127.0.0.1"
#define MYSQL_USER "root"
#define MYSQL_PASS ""
#define MYSQL_DB  "trdm"
#define MAX_STRING 255 //SQL

/* Functions */

forward OnUpdatePlayer(playerid);

forward MySQLConnect(sqlhost[], sqluser[], sqlpass[], sqldb[]);
forward MySQLCheckConnection();
forward MySQLUpdateBuild(query[], sqlplayerid);
forward MySQLUpdateFinish(query[], sqlplayerid);
forward MySQLUpdatePlayerInt(query[], sqlplayerid, sqlvalname[], sqlupdateint);
forward MySQLUpdatePlayerIntSingle(sqlplayerid, sqlvalname[], sqlupdateint);
forward MySQLUpdatePlayerFlo(query[], sqlplayerid, sqlvalname[], Float:sqlupdateflo);
forward MySQLUpdatePlayerStr(query[], sqlplayerid, sqlvalname[], sqlupdatestr[]);
forward MySQLCheckAccount(sqlplayersname[]);
forward MySQLFetchAcctSingle(sqlplayerid, sqlvalname[], sqlresult[]);
forward MySQLFetchAcctRecord(sqlplayerid, sqlresult[]);
forward MySQLCreateAccount(newplayersname[], newpassword[]);
pawn Код:
/* Funcions */

public MySQLConnect(sqlhost[], sqluser[], sqlpass[], sqldb[])
{
    print("MySQL: Attempting to connect to database...");
  mysql_connect(sqlhost,sqluser,sqldb,sqlpass);
    if(mysql_ping()==1)
    {
        print("MYSQL: Database connection established.");
        return 1;
    }
    else
    {
        print("MySQL: Connection error, retrying...");
        mysql_connect(sqlhost,sqluser,sqldb,sqlpass);
        if(mysql_ping()==1)
        {
            print("MySQL: Reconnection successful.");
            return 1;
        }
        else
        {
            print("MySQL: Could not reconnect to database, terminating server...");
            SendRconCommand("exit");
            return 0;
        }
    }
}

public MySQLCheckConnection()
{
    if(mysql_ping()==1)
    {
        return 1;
    }
    else
    {
        print("MySQL: Connection error, retrying...");
        MySQLConnect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS,MYSQL_DB);
        if(mysql_ping()==1)
        {
            print("MySQL: Reconnection successful.");
            return 1;
        }
        else
        {
            print("MySQL: Could not reconnect to database, terminating server...");
            SendRconCommand("exit");
            return 0;
        }
    }
}

public MySQLUpdateBuild(query[], sqlplayerid)
{
    new querylen = strlen(query);
    //new querymax = sizeof(query);
    new querymax = MAX_STRING;
    if (querylen < 1) format(query, querymax, "UPDATE players SET ");
    else if (querymax-querylen < 50)
    {
        // query is too large, send this one and reset
        new whereclause[32];
        format(whereclause, sizeof(whereclause), " WHERE id=%d", sqlplayerid);
        strcat(query, whereclause, querymax);
        mysql_query(query);
        printf("MYSQL(UpdateBuild): %s", query);
        format(query, querymax, "UPDATE players SET ");
    }
    else if (strfind(query, "=", true) != -1) strcat(query, ",", MAX_STRING);
    return 1;
}

public MySQLUpdateFinish(query[], sqlplayerid)
{
    if (strcmp(query, "WHERE id=", false) == 0) mysql_query(query);
    else
    {
        new whereclause[32];
        format(whereclause, sizeof(whereclause)," WHERE id=%d",sqlplayerid);
        strcat(query, whereclause, MAX_STRING);
        mysql_query(query);
        printf("MYSQL(UpdateFinish): %s", query);
        format(query, MAX_STRING, "UPDATE players SET ");
    }
    return 1;
}

public MySQLUpdatePlayerInt(query[], sqlplayerid, sqlvalname[], sqlupdateint)
{
    MySQLUpdateBuild(query, sqlplayerid);
    new updval[64];
    format(updval, sizeof(updval), "%s=%d", sqlvalname, sqlupdateint);
    strcat(query, updval, MAX_STRING);
    return 1;
}

public MySQLUpdatePlayerFlo(query[], sqlplayerid, sqlvalname[], Float:sqlupdateflo)
{
    new flotostr[32];
    format(flotostr, sizeof(flotostr), "%f", sqlupdateflo);
    MySQLUpdatePlayerStr(query, sqlplayerid, sqlvalname, flotostr);
    return 1;
}

public MySQLUpdatePlayerStr(query[], sqlplayerid, sqlvalname[], sqlupdatestr[])
{
    MySQLUpdateBuild(query, sqlplayerid);
    new escstr[128];
    new updval[128];
    mysql_real_escape_string(sqlupdatestr, escstr);
    format(updval, sizeof(updval), "%s='%s'", sqlvalname, escstr);
    strcat(query, updval, MAX_STRING);
    return 1;
}

public MySQLUpdatePlayerIntSingle(sqlplayerid, sqlvalname[], sqlupdateint)
{
    new query[128];
    format(query, sizeof(query), "UPDATE players SET %s=%d WHERE id=%d", sqlvalname, sqlupdateint, sqlplayerid);
    mysql_query(query);
    return 1;
}

public MySQLCheckAccount(sqlplayersname[])
{
    new query[128];
    new escstr[MAX_PLAYER_NAME];
    mysql_real_escape_string(sqlplayersname, escstr);
    format(query, sizeof(query), "SELECT id FROM players WHERE LOWER(Name) = LOWER('%s') LIMIT 1", escstr);
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows()==0)
    {
        return 0;
    }
    else
    {
        new strid[32];
        new intid;
        mysql_fetch_row(strid);
        intid = strval(strid);
        return intid;
    }
}

public MySQLFetchAcctSingle(sqlplayerid, sqlvalname[], sqlresult[])
{
    new query[128];
    format(query, sizeof(query), "SELECT %s FROM players WHERE id = %d LIMIT 1", sqlvalname, sqlplayerid);
    mysql_query(query);
    mysql_store_result();
    if(mysql_fetch_row(sqlresult)==1)
    {
        return 1;
    }
    return 0;
}

public MySQLFetchAcctRecord(sqlplayerid, sqlresult[])
{
    new query[64];
    format(query, sizeof(query), "SELECT * FROM players WHERE id=%d LIMIT 1", sqlplayerid);
    mysql_query(query);
    mysql_store_result();
    if(mysql_fetch_row(sqlresult)==1)
    {
        return 1;
    }
    return 0;
}

public MySQLCreateAccount(newplayersname[], newpassword[])
{
    new query[128];
    new sqlplyname[64];
    new sqlpassword[64];
    mysql_real_escape_string(newplayersname, sqlplyname);
    mysql_real_escape_string(newpassword, sqlpassword);
    format(query, sizeof(query), "INSERT INTO players (Name, Password) VALUES ('%s', '%s')", sqlplyname, sqlpassword);
    mysql_query(query);
    new newplayersid = MySQLCheckAccount(newplayersname);
    if(newplayersid != 0)
    {
        return newplayersid;
    }
    return 0;
}
pawn Код:
/* OnUpdatePlayer Function */

public OnUpdatePlayer(playerid)
{
    printf("OnUpdatePlayer(%d) (0)", playerid);
    if(IsPlayerConnected(playerid))
    {
      printf("OnUpdatePlayer(%d) (1)", playerid);
        if(gPlayerLogged[playerid])
        {
          printf("OnUpdatePlayer(%d) (2)", playerid);
            MySQLCheckConnection();
            new query[MAX_STRING];
            format(query, MAX_STRING, "UPDATE players SET ");
            //MySQLUpdatePlayerStr(query, PlayerInfo[playerid][pSQLID], "Password", PlayerInfo[playerid][pPassword]);
            PlayerInfo[playerid][pMoney] = GetPlayerMoney(playerid);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Money", PlayerInfo[playerid][pMoney]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Bank", PlayerInfo[playerid][pBank]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Skin", PlayerInfo[playerid][pSkin]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Staff", PlayerInfo[playerid][pStaff]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Donator", PlayerInfo[playerid][pDonator]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Respect", PlayerInfo[playerid][pRespect]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Drugs", PlayerInfo[playerid][pDrugs]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Weapons", PlayerInfo[playerid][pWeapons]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Kills", PlayerInfo[playerid][pKills]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Deaths", PlayerInfo[playerid][pDeaths]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Traffics", PlayerInfo[playerid][pTF]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Exterminations", PlayerInfo[playerid][pEX]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "VehicleRobbery", PlayerInfo[playerid][pVR]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "StreetRaces", PlayerInfo[playerid][pSR]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "WantedLevel", PlayerInfo[playerid][pWanted]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "FightingStyle", PlayerInfo[playerid][pFStyle]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "MeleeSkill", PlayerInfo[playerid][pMelee]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "PistolSkill", PlayerInfo[playerid][pPistol]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "SMGSkill", PlayerInfo[playerid][pSMG]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "ShotgunSkill", PlayerInfo[playerid][pShotgun]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "MGSkill", PlayerInfo[playerid][pMG]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "RifleSkill", PlayerInfo[playerid][pRifle]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Team", PlayerInfo[playerid][pTeam]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "House", PlayerInfo[playerid][pHouse]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Business", PlayerInfo[playerid][pBusiness]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Clan", PlayerInfo[playerid][pClan]);
            MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "ClanRank", PlayerInfo[playerid][pClanRank]);
            MySQLUpdateFinish(query, PlayerInfo[playerid][pSQLID]);
            printf("OnUpdatePlayer(%d) Finished", playerid);
        }
    }
    return 1;
}
pawn Код:
/* SERVER LOG
(After change Respect in-game and quit) */


SA-MP Dedicated Server
----------------------
v0.3a R3, (C)2005-2009 SA-MP Team

[12:04:04] filterscripts = "" (string)
[12:04:04]
[12:04:04] Server Plugins
[12:04:04] --------------
[12:04:04] Loading plugin: mysql
[12:04:04]

 > MySQL plugin loaded on. |

[12:04:04]  Loaded.
[12:04:04] Loaded 1 plugins.

[12:04:04]
[12:04:04] Filter Scripts
[12:04:04] ---------------
[12:04:04]  Loaded 0 filter scripts.

[12:04:04]
[12:04:04] Number of pickups: 259
[12:04:04]
[12:04:04] DEBUG TeamCarLockInit()
[12:04:04]
[12:04:04]          =======================================
[12:04:04]          |   XXXXXXXXXXXX©                          |
[12:04:04]          |                                           |
[12:04:04]          |                                  XXXXXXX® |
[12:04:04]          =======================================
[12:04:04]
[12:04:04] MySQL: Attempting to connect to database...
[12:04:04] MYSQL: Database connection established.
[12:04:04] Number of vehicle models: 59
[12:04:50] Incoming connection: 127.0.0.1:4119
[12:04:50] [join] Cr0ssFir3 has joined the server (0:127.0.0.1)
[12:04:50] DEBUG OnPlayerConnect(0)
[12:04:50] Player connecting as [ID:0]Cr0ssFir3
[12:04:50] I will check if connection is alive
[12:04:50] I Have checked the connection and is alive
[12:04:50] I Will hceck if you accounts exists
[12:04:50] Yes your Account exist
[12:04:53] Se tiver conta, ele faz isto(1)
[12:04:57] Conta lida(1)
[12:04:57] Conta lida(2)
[12:04:57] DEBUG OnPropUpdate()
[12:04:57] DEBUG OnPropUpdate()
[12:04:57] Conta lida(3)
[12:04:57] OnPlayerStateChange 0 8 0
[12:04:57] z =1100.374633 int =0
[12:04:57] DEBUG SPAWNED: Playerid:0 Team:3 SpawnPoint:4
[12:04:57] overhight or ob
[12:04:57] DEBUG SetPlayerWeapons(0)
[12:04:57] OnPlayerSpawn Playerid:0
[12:04:57] DEBUG TeamLockDoors(0)
[12:04:57] DEBUG1 InitLockDoors(0)
[12:04:57] OnPlayerStateChange 0 1 8
[12:05:16] DEBUG OnPlayerCommandText(0)
[12:05:16] DEBUG OnPlayerDisconnect(0)1
[12:05:16] OnUpdatePlayer(0) (0)
[12:05:16] OnUpdatePlayer(0) (1)
[12:05:16] OnUpdatePlayer(0) (2)
[12:05:16] MYSQL(UpdateFinish): UPDATE players SET PistolSkill=0,SMGSkill=0,ShotgunSkill=0,MGSkill=0,RifleSkill=0,Team=3,House=255,Business=255,Clan=0,ClanRank=0 WHERE id=1
[12:05:16] OnUpdatePlayer(0) Finished
[12:05:16] DEBUG OnPlayerDisconnect(0)2
[12:05:16] DEBUG OnPlayerDisconnect(0)3
[12:05:16] DEBUG OnPlayerDisconnect(0)4
[12:05:16] [part] Cr0ssFir3 has left the server (0:1)
[12:05:36] --- Server Shutting Down.
[12:05:36]

 > MySQL plugin unloaded.


/* ON DATABASE */

No changes.
Reply
#2

So no one knowns what's the problem?
Reply
#3

I would advise against saving player stats OnPlayerUpdate.

See the important notice in red: https://sampwiki.blast.hk/wiki/OnPlayerUpdate
Reply
#4

Quote:
Originally Posted by Kieren
I would advise saving player stats OnPlayerUpdate.

See the important notice in red: https://sampwiki.blast.hk/wiki/OnPlayerUpdate
That's a terrible idea, even MySQL would lag executing so much for OnPlayerUpdate.
Reply
#5

As you can see, he's not using the native OnPlayerUpdate callback, he's using a custom one.
Reply
#6

Yes, my costum function is only called when the player leave the server, saving all his data changed during the gameplay.
Reply
#7

Can you give me a example Mr. Seif pls?
Reply
#8

Comon here are the MySQL leets?
Reply
#9

Why don't you just make queries yourself? Simple and fast.

pawn Код:
new query[256];
format(query,sizeof(query),"UPDATE players SET money=%d,skin=%d,/*your stuff*/ WHERE id=%d",GetPlayerMoney(playerid),GetPlayerSkin(playerid),/*other stuff*/,sqlplayerid);
mysql_query(query);
Reply
#10

I did exactly as you said and nothing... no data update on DataBase.

SERVER LOG:

pawn Код:
SA-MP Dedicated Server
----------------------
v0.3a R3, (C)2005-2009 SA-MP Team

[12:07:09] filterscripts = "" (string)
[12:07:09]
[12:07:09] Server Plugins
[12:07:09] --------------
[12:07:09] Loading plugin: mysql
[12:07:09]

 > MySQL plugin loaded on. |

[12:07:09]  Loaded.
[12:07:09] Loaded 1 plugins.

[12:07:09]
[12:07:09] Filter Scripts
[12:07:09] ---------------
[12:07:09]  Loaded 0 filter scripts.

[12:07:09]
[12:07:09] Number of pickups: 259
[12:07:09]
[12:07:09] DEBUG TeamCarLockInit()
[12:07:09]
[12:07:09]          =======================================
[12:07:09]          |   XXXXXXXXXXXXXXXXX©                     |
[12:07:09]          |                                           |
[12:07:09]          |                               XXXXXXXXXX® |
[12:07:09]          =======================================
[12:07:09]
[12:07:09] MySQL: Attempting to connect to database...
[12:07:09] MYSQL: Database connection established.
[12:07:09] Number of vehicle models: 58
[12:08:05] Incoming connection: 127.0.0.1:2444
[12:08:05] [join] Cr0ssFir3 has joined the server (0:127.0.0.1)
[12:08:05] DEBUG OnPlayerConnect(0)
[12:08:05] Player connecting as [ID:0]Cr0ssFir3
[12:08:05] I will check if connection is alive
[12:08:05] I Have checked the connection and is alive
[12:08:05] I Will hceck if you accounts exists
[12:08:05] Yes your Account exist
[12:08:09] Se tiver conta, ele faz isto(1)
[12:08:10] Conta lida(1)
[12:08:10] Conta lida(2)
[12:08:10] DEBUG OnPropUpdate()
[12:08:10] DEBUG OnPropUpdate()
[12:08:10] Conta lida(3)
[12:08:10] OnPlayerStateChange 0 8 0
[12:08:10] z =1100.374633 int =0
[12:08:10] DEBUG SPAWNED: Playerid:0 Team:3 SpawnPoint:2
[12:08:10] overhight or ob
[12:08:10] DEBUG SetPlayerWeapons(0)
[12:08:10] OnPlayerSpawn Playerid:0
[12:08:10] DEBUG TeamLockDoors(0)
[12:08:10] DEBUG1 InitLockDoors(0)
[12:08:10] OnPlayerStateChange 0 1 8
[12:08:55] DEBUG OnPlayerDisconnect(0)1

[12:08:55] UPDATE players SET Money=5000,Bank=100,Skin=0,Staff=3000,Donator=0,Respect=10000,Kills=0,Deaths=0,TF=1,ET=1,VR=1,SR=0,WL=0,FS=0,MeleeSkill=0,PistolSkill=0,SMGSkill=0,ShotgunSkill=0,MGSkill=0,RifleSkill=0,Team=3,House=2,Biz=1,Clan=0,ClanRank=0 WHERE id=1

[12:08:55] DEBUG OnPlayerDisconnect(0)2
[12:08:55] DEBUG OnPlayerDisconnect(0)3
[12:08:55] DEBUG OnPlayerDisconnect(0)4
[12:08:55] [part] Cr0ssFir3 has left the server (0:1)
[12:09:05] --- Server Shutting Down.
[12:09:05]

 > MySQL plugin unloaded.

Note: Some of the variables have been changed so the query have less them 256 of size.

pawn Код:
public OnUpdatePlayer(playerid)
{
    if(IsPlayerConnected(playerid))
    {
        if(gPlayerLogged[playerid])
        {
          new query[256];
            MySQLCheckConnection();
            PlayerInfo[playerid][pMoney] = GetPlayerMoney(playerid);
            PlayerInfo[playerid][pSkin] = GetPlayerSkin(playerid);
            format(query,sizeof(query),"UPDATE players SET Money=%d,Bank=%d,Skin=%d,Staff=%d,Donator=%d,Respect=%d,Kills=%d,Deaths=%d,TF=%d,ET=%d,VR=%d,SR=%d,WL=%d,FS=%d,MeleeSkill=%d,PistolSkill=%d,SMGSkill=%d,ShotgunSkill=%d,MGSkill=%d,RifleSkill=%d,Team=%d,House=%d,Biz=%d,Clan=%d,ClanRank=%d WHERE id=%d",
            PlayerInfo[playerid][pMoney],
            PlayerInfo[playerid][pBank],
            PlayerInfo[playerid][pSkin],
            PlayerInfo[playerid][pStaff],
            PlayerInfo[playerid][pDonator],
            PlayerInfo[playerid][pRespect],
            PlayerInfo[playerid][pKills],
            PlayerInfo[playerid][pDeaths],
            PlayerInfo[playerid][pTF],
            PlayerInfo[playerid][pEX],
            PlayerInfo[playerid][pVR],
            PlayerInfo[playerid][pSR],
            PlayerInfo[playerid][pWanted],
            PlayerInfo[playerid][pFStyle],
            PlayerInfo[playerid][pMelee],
            PlayerInfo[playerid][pPistol],
            PlayerInfo[playerid][pSMG],
            PlayerInfo[playerid][pShotgun],
            PlayerInfo[playerid][pMG],
            PlayerInfo[playerid][pRifle],
            PlayerInfo[playerid][pTeam],
            PlayerInfo[playerid][pHouse],
            PlayerInfo[playerid][pBusiness],
            PlayerInfo[playerid][pClan],
            PlayerInfo[playerid][pClanRank],
            PlayerInfo[playerid][pSQLID]);
            mysql_query(query);
            printf("%s", query);
        }
    }
    return 1;
}
More Info:

I have rooter
I use XAMPP for windows(1.7.2) to store the DataBase.

I really dont known what's happening need help guys.

Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)