Query string
#1

Since my saving query is too long, i used strcat and made this:

pawn Код:
strcat(query, "UPDATE `players` SET `LastLogin` = '%s', `Kills` = %d, `Deaths` = %d, `Score` = %i, `Money` = %i, `Level` = %d, `WantedLevel` = %d, `Skin` = %d, `PlayerTeam` = %d, `PlayerGender` = %d,\", sizeof(Query));
    strcat(query, ,"
`PlayingHours` = %d, `PlayingMinutes` = %d, `FirstSpawn` = %d, `Job` = %d, `Bank` = %d, `NoPm` = %d, `Diseases` = %d\", sizeof(Query));
    strcat(query, ,"
`VehicleLicense` = %d, `MotorbikeLicense` = %d, `PlaneLicense` = %d, `HelicopterLicense` = %d, `BankDeposited` = %d, `BankWithdrawal` = %d WHERE `ID`=%d",\", sizeof(Query));
But getting "possible non terminated string, undefined symbol UPDATE" and so on.

I'm sure i did something wrong, but what?
Reply
#2

You have a lot of syntax error (query =/= Query) and you escaped backward slashes, hence why the possible non terminated string error. Try this code:

pawn Код:
strcat(query, "UPDATE `players` SET `LastLogin` = '%s', `Kills` = %d, `Deaths` = %d, `Score` = %i, `Money` = %i, `Level` = %d, `WantedLevel` = %d, `Skin` = %d, `PlayerTeam` = %d, `PlayerGender` = %d,", sizeof(query));
strcat(query,"`PlayingHours` = %d, `PlayingMinutes` = %d, `FirstSpawn` = %d, `Job` = %d, `Bank` = %d, `NoPm` = %d, `Diseases` = %d", sizeof(query));
strcat(query,"`VehicleLicense` = %d, `MotorbikeLicense` = %d, `PlaneLicense` = %d, `HelicopterLicense` = %d, `BankDeposited` = %d, `BankWithdrawal` = %d WHERE `ID`=%d", sizeof(query));
Reply
#3

Thanks but now im getting "expression has no effect" after the query string.

Full code:

pawn Код:
UpdatePlayerData(playerid)
{
    if(Player[playerid][IsLoggedIn] == false) return 0;

    new query[2000];
    strcat(query, "UPDATE `players` SET `LastLogin` = '%s', `Kills` = %d, `Deaths` = %d, `Score` = %i, `Money` = %i, `Level` = %d, `WantedLevel` = %d, `Skin` = %d, `PlayerTeam` = %d, `PlayerGender` = %d,", sizeof(query));
    strcat(query,"`PlayingHours` = %d, `PlayingMinutes` = %d, `FirstSpawn` = %d, `Job` = %d, `Bank` = %d, `NoPm` = %d, `Diseases` = %d", sizeof(query));
    strcat(query,"`VehicleLicense` = %d, `MotorbikeLicense` = %d, `PlaneLicense` = %d, `HelicopterLicense` = %d, `BankDeposited` = %d, `BankWithdrawal` = %d WHERE `ID`= %d", sizeof(query));
    ReturnDate(),
    Player[playerid][Kills],
    Player[playerid][Deaths],
    GetPlayerScore(playerid),
    GetPlayerMoney(playerid),
    Player[playerid][Level],
    GetPlayerWantedLevel(playerid),
    GetPlayerSkin(playerid),
    GetPlayerTeam(playerid),
    Player[playerid][PlayerGender],
    Player[playerid][PlayingHours],
    Player[playerid][PlayingMinutes],
    Player[playerid][FirstSpawn],
    Player[playerid][Job],
    Player[playerid][Bank],
    Player[playerid][NoPm],
    Player[playerid][Diseases],
    Player[playerid][VehicleLicense],
    Player[playerid][MotorbikeLicense],
    Player[playerid][PlaneLicense],
    Player[playerid][HelicopterLicense],
    Player[playerid][BankDeposited],
    Player[playerid][BankWithdrawal],
    Player[playerid][ID]);

    mysql_tquery(g_SQL, query);
    return 1;
}
Reply
#4

strcat doesnt supports %, you need use format

pawn Код:
UpdatePlayerData(playerid)
{
    if(Player[playerid][IsLoggedIn] == false) return 0;

    new query[2000],p = playerid;
    format(query,sizeof(query), "UPDATE `players` SET `LastLogin` = '%s', `Kills` = %d, `Deaths` = %d, `Score` = %i, `Money` = %i, `Level` = %d, `WantedLevel` = %d, `Skin` = %d, `PlayerTeam` = %d, `PlayerGender` = %d,",
    ReturnDate(),
    Player[p][Kills],
    Player[p][Deaths],
    GetPlayerScore(p),
    GetPlayerMoney(p),
    Player[p][Level],
    GetPlayerWantedLevel(p),
    GetPlayerSkin(p),
    GetPlayerTeam(p),
    Player[p][PlayerGender]
    );

    format(query,sizeof(query),"%s `PlayingHours` = %d, `PlayingMinutes` = %d, `FirstSpawn` = %d, `Job` = %d, `Bank` = %d, `NoPm` = %d, `Diseases` = %d", query,
    Player[p][PlayingHours],
    Player[p][PlayingMinutes],
    Player[p][FirstSpawn],
    Player[p][Job],
    Player[p][Bank],
    Player[p][NoPm],
    Player[p][Diseases]
    );

    format(query,sizeof(query),"%s `VehicleLicense` = %d, `MotorbikeLicense` = %d, `PlaneLicense` = %d, `HelicopterLicense` = %d, `BankDeposited` = %d, `BankWithdrawal` = %d WHERE `ID`= %d", query,
    Player[p][VehicleLicense],
    Player[p][MotorbikeLicense],
    Player[p][PlaneLicense],
    Player[p][HelicopterLicense],
    Player[p][BankDeposited],
    Player[p][BankWithdrawal],
    Player[p][ID]
    );

    mysql_tquery(g_SQL, query);
    return 1;
}
Reply
#5

You have a lot of syntax errors as GRiMMREAPER says and you can't use specifiers as Jefff saiys, the way to do it is combined of GRiMMREAPER and Jefff ideas, you have to format it first and after that you have to connect them together into another string variable using "strcat" function. Try that:
PHP код:
UpdatePlayerData(playerid)
{
    if(
Player[playerid][IsLoggedIn] == false) return 0;
    new 
query[4096];
    new 
query2[4096];
    
format(querysizeof(query), "UPDATE `players` SET `LastLogin` = '%s', `Kills` = '%d', `Deaths` = '%d', `Score` = '%i', `Money` = '%i', `Level` = '%d', `WantedLevel` = '%d', `Skin` = '%d', `PlayerTeam` = '%d', `PlayerGender` = '%d',",
    
ReturnDate(),
    
Player[playerid][Kills],
    
Player[playerid][Deaths],
    
GetPlayerScore(playerid),
    
GetPlayerMoney(playerid),
    
Player[playerid][Level],
    
GetPlayerWantedLevel(playerid),
    
GetPlayerSkin(playerid),
    
GetPlayerTeam(playerid),
    
Player[playerid][PlayerGender]);
    
strcat(query2query);
    
format(querysizeof(query), "`PlayingHours` = '%d', `PlayingMinutes` = '%d', `FirstSpawn` = '%d', `Job` = '%d', `Bank` = '%d', `NoPm` = '%d', `Diseases` = '%d',",
    
Player[playerid][PlayingHours],
    
Player[playerid][PlayingMinutes],
    
Player[playerid][FirstSpawn],
    
Player[playerid][Job],
    
Player[playerid][Bank],
    
Player[playerid][NoPm],
    
Player[playerid][Diseases]);
    
strcat(query2query);
    
format(querysizeof(query), "`VehicleLicense` = '%d', `MotorbikeLicense` = '%d', `PlaneLicense` = '%d', `HelicopterLicense` = '%d', `BankDeposited` = '%d', `BankWithdrawal` = '%d' WHERE `ID`= '%d'",
    
Player[playerid][VehicleLicense],
    
Player[playerid][MotorbikeLicense],
    
Player[playerid][PlaneLicense],
    
Player[playerid][HelicopterLicense],
    
Player[playerid][BankDeposited],
    
Player[playerid][BankWithdrawal],
    
Player[playerid][ID]);
    
strcat(query2query);
    
    
mysql_tquery(g_SQLquery2);
    return 
1;

Reply
#6

Im still wonder why you want to save all that stuff in one big query. Its UpdatePlayerData function i get it, but why not save the stats when it changes? I mean i doubt PlayerGender its changeing too often so why update in a big query with other stats instead of saving it when it changes

Also dont use ' (single quote) for %d/%i/%f will slow down the query process time a bit cus mysql need to convert from string to integer to fit the number into his column
Reply
#7

Quote:
Originally Posted by ******
Посмотреть сообщение
What?

I've heard a lot of rubbish claims about "performance" on these forums over the years. People with wild ideas about what is slow and what is fast, always with no evidence to support their claim, and always totally wrong.

This is possibly the most insane claim about performance issues I've even seen! There is nothing wrong with `%d` and the like!
This is what Banditul18 means: https://stackoverflow.com/questions/...numbers-or-not
Reply
#8

Quote:
Originally Posted by ******
Посмотреть сообщение
What?

I've heard a lot of rubbish claims about "performance" on these forums over the years. People with wild ideas about what is slow and what is fast, always with no evidence to support their claim, and always totally wrong.

This is possibly the most insane claim about performance issues I've even seen! There is nothing wrong with `%d` and the like!
Actually thats a good point. I saw Vince(i think he has) talking about this in a topic and i took it as good. I actually never tested the response time of it or made a benchmark to see if its true or not
Reply
#9

- You can reduce the string query size and update the table 3 times.
- use mysql_query instead of mysql_tquery
- use '%e' instead of '%s'

PHP код:
stock UpdatePlayerData(playerid)
{
    if(
Player[playerid][IsLoggedIn] == false) return 0;
    new 
query[1024], playerid;
    
format(query,sizeof(query), "UPDATE `players` SET `LastLogin` = '%e', `Kills` = %i, `Deaths` = %i, `Score` = %i, `Money` = %i, `Level` = %i, `WantedLevel` = %i, `Skin` = %i, `PlayerTeam` = %i, `PlayerGender` = %i WHERE `ID`= %i",
    
ReturnDate(), Player[p][Kills], Player[p][Deaths], GetPlayerScore(p), GetPlayerMoney(p), Player[p][Level], GetPlayerWantedLevel(p), GetPlayerSkin(p), GetPlayerTeam(p),Player[p][PlayerGender], Player[p][ID]);
    
mysql_query(g_SQLquery);
    
format(query,sizeof(query),"UPDATE `players` SET `PlayingHours` = %i, `PlayingMinutes` = %i, `FirstSpawn` = %i, `Job` = %i, `Bank` = %i, `NoPm` = %i, `Diseases` = %i WHERE `ID`= %i",
    
Player[p][PlayingHours], Player[p][PlayingMinutes], Player[p][FirstSpawn], Player[p][Job], Player[p][Bank], Player[p][NoPm], Player[p][Diseases], Player[p][ID]);
    
mysql_query(g_SQLquery);
    
format(query,sizeof(query), "UPDATE `players` SET `VehicleLicense` = %i, `MotorbikeLicense` = %i, `PlaneLicense` = %i, `HelicopterLicense` = %i, `BankDeposited` = %i, `BankWithdrawal` = %i WHERE `ID`= %i",
    
Player[p][VehicleLicense], Player[p][MotorbikeLicense],    Player[p][PlaneLicense], Player[p][HelicopterLicense], Player[p][BankDeposited], Player[p][BankWithdrawal],    Player[p][ID]);
    
mysql_query(g_SQLquery);
    return 
1;

Reply
#10

Thank you everyone.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)