An error with mysql.
#1

Alright, so i'll cut to the chase directly.
I'm using MYSQL to run with my server, well Mysql R5 to be more precise.

It all works great and all that, but there is one thing that I can't seem to understand.
When ever the server saves something to the MYSQL Database, it does that perfectly fine, but the server itself, does NOT read the changes to the MYSQL Database, untill there is a GMX.
Am I missing some command, to make the server read the actual changes to the databases?
For example, this is my weapon saving system;

Код:
stock SaveWeapons(playerid)
{
    new query[1024], pname[24];
    GetPlayerName(playerid, pname, 24);
	GetPlayerWeaponData(playerid, 1, Player[playerid][Weapon1], Player[playerid][Weapon1a]);
	GetPlayerWeaponData(playerid, 2, Player[playerid][Weapon2], Player[playerid][Weapon2a]);
	GetPlayerWeaponData(playerid, 3, Player[playerid][Weapon3], Player[playerid][Weapon3a]);
	GetPlayerWeaponData(playerid, 4, Player[playerid][Weapon4], Player[playerid][Weapon4a]);
	GetPlayerWeaponData(playerid, 5, Player[playerid][Weapon5], Player[playerid][Weapon5a]);
	GetPlayerWeaponData(playerid, 6, Player[playerid][Weapon6], Player[playerid][Weapon6a]);
	GetPlayerWeaponData(playerid, 7, Player[playerid][Weapon7], Player[playerid][Weapon7a]);
	GetPlayerWeaponData(playerid, 8, Player[playerid][Weapon8], Player[playerid][Weapon8a]);
	format(query, sizeof(query), "UPDATE Accounts SET Weapon1=%d, Weapon1A=%d, Weapon2=%d, Weapon2A=%d, Weapon3=%d, Weapon3A=%d, Weapon4=%d, Weapon4A=%d, Weapon5=%d, Weapon5A=%d, Weapon6=%d, Weapon6A=%d, Weapon7=%d, Weapon7A=%d, Weapon8=%d, Weapon8A=%d WHERE Username='%s'",
	Player[playerid][Weapon1],
	Player[playerid][Weapon1a],
	Player[playerid][Weapon2],
	Player[playerid][Weapon2a],
	Player[playerid][Weapon3],
	Player[playerid][Weapon3a],
	Player[playerid][Weapon4],
	Player[playerid][Weapon4a],
	Player[playerid][Weapon5],
	Player[playerid][Weapon5a],
	Player[playerid][Weapon6],
	Player[playerid][Weapon6a],
	Player[playerid][Weapon7],
	Player[playerid][Weapon7a],
	Player[playerid][Weapon8],
	Player[playerid][Weapon8a],
	pname);
    mysql_query(query);
    return 1;
}
The above works perfectly fine, and gets saved in the MYSQL database accordingly and in the correct way.

Now, this is the code that happens when the server needs to load the saved weapons.

Код:
mysql_fetch_field_row(savingstring, "Weapon1"); Player[playerid][Weapon1] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon1A"); Player[playerid][Weapon1a] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon2"); Player[playerid][Weapon2] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon2A"); Player[playerid][Weapon2a] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon3"); Player[playerid][Weapon3] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon3A"); Player[playerid][Weapon3a] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon4"); Player[playerid][Weapon4] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon4A"); Player[playerid][Weapon4a] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon5"); Player[playerid][Weapon5] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon5A"); Player[playerid][Weapon5a] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon6"); Player[playerid][Weapon6] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon6A"); Player[playerid][Weapon6a] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon7"); Player[playerid][Weapon7] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon7A"); Player[playerid][Weapon7a] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon8"); Player[playerid][Weapon8] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon8A"); Player[playerid][Weapon8a] = strval(savingstring);
Now the thing is, as soon it does that specific code, it doesn't read anything at all. It just treaths them as 0, like it was before in the database.
This is the code I use to give them their weapons, but obviously, it can't set them, as they have none according to the server.
Код:
GivePlayerWeapon(playerid, Player[playerid][Weapon1], Player[playerid][Weapon1a]);
		GivePlayerWeapon(playerid, Player[playerid][Weapon2], Player[playerid][Weapon2a]);
		GivePlayerWeapon(playerid, Player[playerid][Weapon3], Player[playerid][Weapon3a]);
		GivePlayerWeapon(playerid, Player[playerid][Weapon4], Player[playerid][Weapon4a]);
		GivePlayerWeapon(playerid, Player[playerid][Weapon5], Player[playerid][Weapon5a]);
		GivePlayerWeapon(playerid, Player[playerid][Weapon6], Player[playerid][Weapon6a]);
		GivePlayerWeapon(playerid, Player[playerid][Weapon7], Player[playerid][Weapon7a]);
		GivePlayerWeapon(playerid, Player[playerid][Weapon8], Player[playerid][Weapon8a]);
This also happens when dynamicly adding a faction vehicle. It gets added just fine, but it'll respawn at the place where you created the vehicle with "/veh", untill there is a GMX. After the GMX, the vehicle just respawns fine.

Edit: Forgot to mention, that it does this whenever the mysql database gets updated. The server does not read the changed values at all.
Best example is unbanning a player. They get unbanned perfectly fine in the MYSQL database, but as soon they reconnect, prior to a GMX, they still are banned. After unbanning and a GMX, they can rejoin perfectly fine.

Thanks in advance,
Tessa.
Reply
#2

This exact thing happened to me before, I resolved it somehow... show all your code for these that you did, the MySQL loading system. Not just parts of them. Parts of them won't help us.

That feeling when you've fixed something and then forget how you did it.. .
Reply
#3

Alright. This is the part, where the stats of a player gets loaded.
Note, I updated the main post to give a better explenation, but it seems you know what I am talking about.

Код:
stock LoadStats(playerid)
{
    new query[1024], pname[24], savingstring[40];
    GetPlayerName(playerid, pname, 24);
    format(query, sizeof(query), "SELECT * FROM Accounts WHERE Username = '%s'", pname);
    mysql_query(query);
    mysql_store_result();
    while(mysql_fetch_row_format(query,"|"))
    {
        mysql_fetch_field_row(savingstring, "Money"); Player[playerid][Money] = strval(savingstring);
        mysql_fetch_field_row(savingstring, "BankMoney"); Player[playerid][BankMoney] = strval(savingstring);
        mysql_fetch_field_row(savingstring, "Level"); Player[playerid][Level] = strval(savingstring);
        mysql_fetch_field_row(savingstring, "AdminLevel"); Player[playerid][AdminLevel] = strval(savingstring);
        mysql_fetch_field_row(savingstring, "Faction"); Player[playerid][Faction] = strval(savingstring);
        mysql_fetch_field_row(savingstring, "FactionRank"); Player[playerid][FactionRank] = strval(savingstring);
        mysql_fetch_field_row(savingstring, "Wallet"); Player[playerid][Wallet] = strval(savingstring);
        mysql_fetch_field_row(savingstring, "RegistrationStep"); Player[playerid][RegistrationStep] = strval(savingstring);
        mysql_fetch_field_row(savingstring, "BirthDay"); Player[playerid][BirthDay] = strval(savingstring);
        mysql_fetch_field_row(savingstring, "BirthMonth"); Player[playerid][BirthMonth] = strval(savingstring);
        mysql_fetch_field_row(savingstring, "BirthYear"); Player[playerid][BirthYear] = strval(savingstring);
        mysql_fetch_field_row(savingstring, "SpawnPoint"); Player[playerid][SpawnPoint] = strval(savingstring);
        mysql_fetch_field_row(savingstring, "TutorialComplete"); Player[playerid][TutorialComplete] = strval(savingstring);
        mysql_fetch_field_row(savingstring, "HelperLevel"); Player[playerid][HelperLevel] = strval(savingstring);
        mysql_fetch_field_row(savingstring, "Accent"); strmid(Player[playerid][Accent], savingstring, 0, strlen(savingstring), 20);
        mysql_fetch_field_row(savingstring, "MinutesPlayed"); Player[playerid][MinutesPlayed] = strval(savingstring);
        mysql_fetch_field_row(savingstring, "AchievementPoints"); Player[playerid][AchievementPoints] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "ExperiencePoints"); Player[playerid][ExperiencePoints] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "DonatorLevel"); Player[playerid][DonatorLevel] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Deaths"); Player[playerid][Deaths] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Kills"); Player[playerid][Kills] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Clothes1"); Player[playerid][Clothes1] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Clothes2"); Player[playerid][Clothes2] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Clothes3"); Player[playerid][Clothes3] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "ClothesUsed"); Player[playerid][ClothesUsed] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "CarLicense"); Player[playerid][CarLicense] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "HouseKey"); Player[playerid][HouseKey] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Business1Key"); Player[playerid][Business1Key] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Business2Key"); Player[playerid][Business2Key] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Banned"); Player[playerid][Banned] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "BanReason"); strmid(Player[playerid][BanReason], savingstring, 0, strlen(savingstring), 128);
		mysql_fetch_field_row(savingstring, "BannedBy"); 
		mysql_fetch_field_row(savingstring, "Radio"); Player[playerid][Radio] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "RadioWave"); Player[playerid][RadioWave] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "SubRank"); strmid(Player[playerid][SubRank], savingstring, 0, strlen(savingstring), 24);
		mysql_fetch_field_row(savingstring, "CellPhone"); Player[playerid][CellPhone] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "CellPhoneNumber"); Player[playerid][CellPhoneNumber] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Job"); Player[playerid][Job] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "CellBattery"); Player[playerid][CellBattery] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "CellPhoneStatus"); Player[playerid][CellPhoneStatus] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "CoalMineComplete"); Player[playerid][CoalMineComplete] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Phonebook"); Player[playerid][Phonebook] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Crisps"); Player[playerid][Crisps] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Sprunk"); Player[playerid][Sprunk] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Cigarettes"); Player[playerid][Cigarettes] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Watch"); Player[playerid][Watch] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Mask"); Player[playerid][Mask] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "CarKey1"); Player[playerid][CarKey1] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "CarKey2"); Player[playerid][CarKey2] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "CarKey3"); Player[playerid][CarKey3] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "TruckLicense"); Player[playerid][TruckLicense] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Fines"); Player[playerid][Fines] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Arrests"); Player[playerid][Arrests] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "JailTime"); Player[playerid][JailTime] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "AJailTime"); Player[playerid][AJailTime] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weed"); Player[playerid][Weed] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Cocaine"); Player[playerid][Cocaine] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Meth"); Player[playerid][Meth] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "WeaponLicense"); Player[playerid][WeaponLicense] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "WeedSeeds"); Player[playerid][WeedSeeds] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "BanHour"); Player[playerid][BanHour] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "BanMinute"); Player[playerid][BanMinute] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon1"); Player[playerid][Weapon1] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon1A"); Player[playerid][Weapon1a] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon2"); Player[playerid][Weapon2] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon2A"); Player[playerid][Weapon2a] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon3"); Player[playerid][Weapon3] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon3A"); Player[playerid][Weapon3a] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon4"); Player[playerid][Weapon4] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon4A"); Player[playerid][Weapon4a] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon5"); Player[playerid][Weapon5] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon5A"); Player[playerid][Weapon5a] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon6"); Player[playerid][Weapon6] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon6A"); Player[playerid][Weapon6a] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon7"); Player[playerid][Weapon7] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon7A"); Player[playerid][Weapon7a] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon8"); Player[playerid][Weapon8] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon8A"); Player[playerid][Weapon8a] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon9"); Player[playerid][Weapon9] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon9A"); Player[playerid][Weapon9a] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon10"); Player[playerid][Weapon10] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon10A"); Player[playerid][Weapon10a] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon11"); Player[playerid][Weapon11] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon11A"); Player[playerid][Weapon11a] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon12"); Player[playerid][Weapon12] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Weapon12A"); Player[playerid][Weapon12a] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Health"); Player[playerid][Health] = floatstr(savingstring);
		mysql_fetch_field_row(savingstring, "Armour"); Player[playerid][Armour] = floatstr(savingstring);
		mysql_fetch_field_row(savingstring, "FishingRod"); Player[playerid][FishingRod] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Fish1"); Player[playerid][Fish1] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Fish2"); Player[playerid][Fish2] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Fish3"); Player[playerid][Fish3] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Fish4"); Player[playerid][Fish4] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "Fish5"); Player[playerid][Fish5] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "FishBait"); Player[playerid][FishBait] = strval(savingstring);
		mysql_fetch_field_row(savingstring, "FishLicense"); Player[playerid][FishLicense] = strval(savingstring);
    }
    mysql_free_result();
    Logged[playerid] = 1;
    SetTimerEx("StartTimer", 1000, 0, "i", playerid);
    MinuteTimer[playerid] = SetTimerEx("MinuteCount", 60000, 1, "i", playerid);
    return 1;
}
This is the code where the faction vehicle gets saved.

Код:
stock SaveVehicle(Float:VX, Float:VY, Float:VZ, Float:VA, dModel, col1, col2, faction)
{
	new
		Query[512];

	format(Query, sizeof(Query), "INSERT INTO `Vehicles` (VehicleModel, VehicleX, VehicleY, VehicleZ, VehicleAngle, Colour1, Colour2, Faction) VALUES(%d, %f, %f, %f, %f, %i, %i, %i)",
	dModel, VX, VY, VZ, VA, col1, col2, faction);

	mysql_query(Query);
	mysql_free_result();
	return 1;
}
If you need anymore code or a specific code, feel free to ask for, as I really want this to get resolved, as i'm completely clueless on this one.

Edit; I have been wondering... If i do upgrade to the latest mysql version... will it be worth it and *might*, it fix the issue?
Reply
#4

Sorry for double post..;
Tried to play around with some things like adding "mysql_reload();" to the "SaveVehicle" fuction, but this also did not work.
It appears my initial tought, that the server does NOT read the changed mysql values, is correct.
If you get admin jailed, it works perfectly fine and you do get released from the admin jail after the set time,
but then the changed value problem re-appears because after you get released from the admin jail,
you will get released each minute, untill a GMX occurs.
I have looked everywhere on this forum, but nothing indicates what the problem might be.
Altho the problem now clearly is the server, not reading/applying the changed MYSQL values.
Reply
#5

The way I fixed it was, putting the symbol ` around the things that you want to do.. I'll explain it for you, take a look, do it only for the queries though.

This:

pawn Код:
format(query, sizeof(query), "SELECT * FROM Accounts WHERE Username = '%s'", pname);
Would be:

pawn Код:
format(query, sizeof(query), "SELECT * FROM `Accounts` WHERE `Username`='%s'", pname);
And this:

pawn Код:
format(Query, sizeof(Query), "INSERT INTO `Vehicles` (VehicleModel, VehicleX, VehicleY, VehicleZ, VehicleAngle, Colour1, Colour2, Faction) VALUES(%d, %f, %f, %f, %f, %i, %i, %i)", dModel, VX, VY, VZ, VA, col1, col2, faction);
Would be:

pawn Код:
format(Query, sizeof(Query), "INSERT INTO `Vehicles` (`VehicleModel`, `VehicleX`, `VehicleY`, `VehicleZ`, `VehicleAngle`, `Colour1`, `Colour2`, `Faction`) VALUES('%d', '%f', '%f', '%f', '%f', '%i', '%i', '%i')", dModel, VX, VY, VZ, VA, col1, col2, faction);
Notice how I added the ' symbol for the values.

That's how I fixed mine, it might work for you too, give it a go.
Reply
#6

Alright, I applied those changes to the Weapon Saving System, the faction vehicle saving system and the LoadStat + Savestat system. It didn't resolve the problem, but I'll just keep those changes there, just in case.

I'm really thinking about updating to the R7, but its the changes to the "script functions", that scare me to update the plugin, as I have no idea what actually needs to be changed for my script, to be able to compile again.
Reply
#7

Update: Tried to play around with some settings, like "mysql_reload();" and adding those chars to every single mysql query, didn't fix it, and it actually showed more functions beeing affected by the problem, eg. Car dealership, admin jail, normal jail, weapon saving.. wanted level saving.. The only thing that is working properly (save & load), is user registration.
Reply
#8

What does your Debug.txt show?

https://sampwiki.blast.hk/wiki/MySQL#mysql_debug

It'll be saved in your server directory/Debug.txt
Reply
#9

Hmm, for some reason, when using "mysql_debug(1);", it actually resolved the issue..... its now also saving weapons & loading them.....
Reply
#10

So, player's weapon won't save in DB?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)