MySQL Problem -
zT KiNgKoNg - 06.11.2013
Whilst attempting to load the Sub-Accounts that are linked to a master account into dialog with the following code it returns a Mysql Dead connection error.
Error Code
Код:
[14:59:19] >> mysql_query( Connection handle: 1 )
[14:59:19] CMySQLHandler::Query(SELECT * FROM `Character_Data` WHERE ( `owner_id` = '1' )) - Successfully executed.
[14:59:19] >> mysql_num_rows( Connection handle: 1 )
[14:59:19] CMySQLHandler::NumRows() - You cannot call this function now. (Reason: Dead Connection)
[14:59:19] >> mysql_free_result( Connection handle: 1 )
[14:59:19] CMySQLHandler::FreeResult() - The result is already empty.
[14:59:19] >> mysql_free_result( Connection handle: 1 )
[14:59:19] CMySQLHandler::FreeResult() - The result is already empty.
Loading Code
pawn Код:
public LoadMasterSubAccounts(playerid)
{
new count = 0, CharacterName[MAX_PLAYER_NAME];
format(MasterAccount[playerid][CharacterString], 128, "");
if(MasterAccount[playerid][MasterLoggedIn])
{
format(Query, sizeof(Query), "SELECT * FROM `Character_Data` WHERE ( `owner_id` = '%d' )", MasterAccount[playerid][MasterID]);
mysql_query(Query);
count = mysql_num_rows();
if(count == 0)
{
ShowPlayerDialog(playerid, DIALOG_MAINMENU, DIALOG_STYLE_LIST, "Main Menu - Character Selection", "No characters available.", "Spawn", "Quit");
}
for(new a;a<count;a++)
{
mysql_get_field("CharacterName", CharacterName);
format( MasterAccount[playerid][CharacterString], 128, "%s\n%s", MasterAccount[playerid][CharacterString], strreplace(CharacterName, '_', ' '));
printf("Character Loaded: %s",CharacterName);
mysql_next_row();
}
if(strlen(MasterAccount[playerid][CharacterString]) >= 1) { ShowPlayerDialog(playerid, DIALOG_MAINMENU, DIALOG_STYLE_LIST, "Main Menu - Character Selection", MasterAccount[playerid][CharacterString], "Spawn", "Quit"); }
mysql_free_result();
}
}
Re: MySQL Problem -
Djole1337 - 06.11.2013
As I can see you're missing mysql_store_result();
pawn Код:
// .. your code
format(Query, sizeof(Query), "SELECT * FROM `Character_Data` WHERE ( `owner_id` = '%d' )", MasterAccount[playerid][MasterID]);
mysql_query(Query);
mysql_store_result();
count = mysql_num_rows();
// .. your code
Re: MySQL Problem -
zT KiNgKoNg - 06.11.2013
Thanks for responding just that i have another problem now, its loading the dialog but not the characters.
pawn Код:
public LoadMasterSubAccounts(playerid)
{
new count = 0, CharacterName[MAX_PLAYER_NAME];
format(MasterAccount[playerid][CharacterString], 128, "");
if(MasterAccount[playerid][MasterLoggedIn])
{
format(Query, sizeof(Query), "SELECT * FROM `Character_Data` WHERE ( `owner_id` = '%d' )", MasterAccount[playerid][MasterID]);
mysql_query(Query);
mysql_store_result();
count = mysql_num_rows();
if(count == 0)
{
ShowPlayerDialog(playerid, DIALOG_MAINMENU, DIALOG_STYLE_LIST, "Main Menu - Character Selection", "No characters available.", "Spawn", "Quit");
}
for(new a;a<count;a++)
{
mysql_get_field("CharacterName", CharacterName);
format( MasterAccount[playerid][CharacterString], 128, "%s\n%s", MasterAccount[playerid][CharacterString], RemovePlayerUnderscoreString(CharacterName));
printf("Character Loaded: %s",RemovePlayerUnderscoreString(CharacterName));
mysql_next_row();
}
if(strlen(MasterAccount[playerid][CharacterString]) >= 1) { ShowPlayerDialog(playerid, DIALOG_MAINMENU, DIALOG_STYLE_LIST, "Main Menu - Character Selection", MasterAccount[playerid][CharacterString], "Spawn", "Quit"); }
mysql_free_result();
}
}
pawn Код:
stock RemovePlayerUnderscoreString(string[])
{
new str[24];
strmid(str,string,0,strlen(string),24);
for(new i = 0; i < MAX_PLAYER_NAME; i++)
{
if (str[i] == '_') str[i] = ' ';
}
return str;
}
Re: MySQL Problem -
Djole1337 - 06.11.2013
I'm not using this MySQL plugin but it should look like:
pawn Код:
//.. your code
new result[128];
while(mysql_retrieve_row())
{
mysql_fetch_field_row(result, "CharacterName"), strcat(MasterAccount[playerid][CharacterString], RemovePlayerUnderscoreString(result), 128);
}
instead of this:
pawn Код:
for(new a;a<count;a++)
{
mysql_get_field("CharacterName", CharacterName);
format( MasterAccount[playerid][CharacterString], 128, "%s\n%s", MasterAccount[playerid][CharacterString], RemovePlayerUnderscoreString(CharacterName));
printf("Character Loaded: %s",RemovePlayerUnderscoreString(CharacterName));
mysql_next_row();
}
Re: MySQL Problem -
zT KiNgKoNg - 06.11.2013
Thanks for the response, going to test it now.
Note: if you're going to help someone and then give them something you would use at least use the same way they stored that data and for example not 'result'