MySQL Problem
#1

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();
    }
}
Reply
#2

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
Reply
#3

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;
}
Reply
#4

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();
        }
Reply
#5

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'
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)