SA-MP Forums Archive
MySQL loading problem - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: MySQL loading problem (/showthread.php?tid=576111)



MySQL loading problem - SandKing94 - 01.06.2015

My code is:
Код:
//This is under OnGameModeInit
mysql_function_query(Connection,"SELECT * FROM houses",false,"LoadHouses","i",playerid);
//The public
public LoadHouses()
{
	new string[128];
    static rows,fields;
	cache_get_data(rows, fields, Connection);
	for(new i = 0; i < rows; i++)
	{
	    Houses++;
	    cache_get_field_content(0,"Owner",hInfo[i][hOwner],Connection,64);
        hInfo[i][hIndex] = cache_get_field_content_int(0,"ID");
	    hInfo[i][hPrice] = cache_get_field_content_int(0,"Price");
	    hInfo[i][hPos][0] = cache_get_field_content_float(0,"X");
	    hInfo[i][hPos][1] = cache_get_field_content_float(0,"Y");
	    hInfo[i][hPos][2] = cache_get_field_content_float(0,"Z");
    }
    format(string,sizeof(string),"Loaded %d houses",Houses);
    print(string);
    Housess = Houses;
    SpawnHouses();
    return 1;
}
//SpawnHouses
stock SpawnHouses()
{
	new string[128];
	while(Housess >= 1)
	{
    	hInfo[Housess][hOne] = CreateDynamicPickup(1273, 1, hInfo[Housess][hPos][0], hInfo[Housess][hPos][1], hInfo[Housess][hPos][2], 0);
    	format(string, sizeof(string), "House owner:%s", hInfo[Housess][hOwner]);
		hInfo[Housess][hTwo] = CreateDynamic3DTextLabel(string, COLOR_WHITE, hInfo[Housess][hPos][0], hInfo[Housess][hPos][1], hInfo[Housess][hPos][2], 0, 0, 0);
    	Housess--;
    }
}
This prints the right amount of houses in my database but doesnt spawn pickups and when i use my command /gotohouse whatever id of house i type it teleports me to one position, so it loads all houses on the same position.


Re: MySQL loading problem - rickisme - 01.06.2015

... That's because you only load row 0 data for all rows =m=

Change :
pawn Код:
cache_get_field_content(0,"Owner",hInfo[i][hOwner],Connection,64);
        hInfo[i][hIndex] = cache_get_field_content_int(0,"ID");
        hInfo[i][hPrice] = cache_get_field_content_int(0,"Price");
        hInfo[i][hPos][0] = cache_get_field_content_float(0,"X");
        hInfo[i][hPos][1] = cache_get_field_content_float(0,"Y");
        hInfo[i][hPos][2] = cache_get_field_content_float(0,"Z");
To :
pawn Код:
cache_get_field_content(i,"Owner",hInfo[i][hOwner],Connection,64);
        hInfo[i][hIndex] = cache_get_field_content_int(i,"ID");
        hInfo[i][hPrice] = cache_get_field_content_int(i,"Price");
        hInfo[i][hPos][0] = cache_get_field_content_float(i,"X");
        hInfo[i][hPos][1] = cache_get_field_content_float(i,"Y");
        hInfo[i][hPos][2] = cache_get_field_content_float(i,"Z");



Re: MySQL loading problem - Psykotikum - 01.06.2015

You're not loading the data correctly.


Re: MySQL loading problem - Konstantinos - 01.06.2015

There are few issues, the one rickisme mentioned about the rows. You were actually retrieving only the first row and not the rest - that's what the loop is for!
In mysql_function_query, you need to set cache to true and you don't need any extra argument such as playerid which is undefined symbol in OnGameModeInit anyway.
You don't need a second loop either.

PHP код:
//This is under OnGameModeInit
mysql_function_query(Connection,"SELECT * FROM houses",true,"LoadHouses","");
public 
LoadHouses()
{
    new 
string[40] = "House owner:",fields;
    
cache_get_data(HousessfieldsConnection);
    
    for(new 
0Housessi++)
    {
        
cache_get_field_content(i,"Owner",hInfo[i][hOwner],Connection,64);
        
hInfo[i][hIndex] = cache_get_field_content_int(i,"ID");
        
hInfo[i][hPrice] = cache_get_field_content_int(i,"Price");
        
hInfo[i][hPos][0] = cache_get_field_content_float(i,"X");
        
hInfo[i][hPos][1] = cache_get_field_content_float(i,"Y");
        
hInfo[i][hPos][2] = cache_get_field_content_float(i,"Z");
        
        
hInfo[i][hOne] = CreateDynamicPickup(12731hInfo[i][hPos][0], hInfo[i][hPos][1], hInfo[i][hPos][2], 0);
        
strcat(stringhInfo[i][hOwner], sizeof (string));
        
hInfo[i][hTwo] = CreateDynamic3DTextLabel(stringCOLOR_WHITEhInfo[i][hPos][0], hInfo[i][hPos][1], hInfo[i][hPos][2], 000);
    }
    
printf("Loaded %d houses",Housess);
    return 
1;




Re: MySQL loading problem - SandKing94 - 01.06.2015

Then how to load player account ? ?
Код:
public LoadAccount(playerid)
{
    cache_get_field_content(0,"Password",pInfo[playerid][Password]);
    pInfo[playerid][Level] = cache_get_field_content_int(0,"Level");
    pInfo[playerid][Hours] = cache_get_field_content_int(0,"Hours");
    pInfo[playerid][Minutes] = cache_get_field_content_int(0,"Minutes");

    return 1;
}



Re: MySQL loading problem - Stev - 01.06.2015

Loading accounts, This might help you: https://sampforum.blast.hk/showthread.php?tid=485633


Re: MySQL loading problem - dusk - 01.06.2015

Quote:
Originally Posted by SandKing94
Посмотреть сообщение
Then how to load player account ? ?
Код:
public LoadAccount(playerid)
{
    cache_get_field_content(0,"Password",pInfo[playerid][Password]);
    pInfo[playerid][Level] = cache_get_field_content_int(0,"Level");
    pInfo[playerid][Hours] = cache_get_field_content_int(0,"Hours");
    pInfo[playerid][Minutes] = cache_get_field_content_int(0,"Minutes");

    return 1;
}
This code is valid.

The first parameter of cache_get_field_content is the row index(which start at 0). So it's okay to use 0 if you only load 1 row(like you do here).

But if you select multiple rows, you will need to loop through all of them because index 0 is merely the first row, that second one will be at index 1 and so on.


Re: MySQL loading problem - Konstantinos - 01.06.2015

Stev already linked you to a tutorial for what you asked for but just a note on your current code.

When using cache_get_field_content function with enum-array, you need to add the max size for it to work.


Re: MySQL loading problem - SandKing94 - 01.06.2015

So i have to make it like that ?
Код:
cache_get_field_content(0,"Password",pInfo[playerid][Password]);
    pInfo[playerid][Level] = cache_get_field_content_int(1,"Level");
    pInfo[playerid][Hours] = cache_get_field_content_int(2,"Hours");
    pInfo[playerid][Minutes] = cache_get_field_content_int(3,"Minutes");



Re: MySQL loading problem - dusk - 01.06.2015

No, dont mix columns and rows.

Your table probably looks like somewhat like this:

Код:
Password | Level | Hours | Minutes
Those are columns, each row has(most likely) a value in it. There can be multiple rows. I understand that you select soemthing like WHERE name is equal to the player name. So probably you will only have one row here. That means all indexes will be 0.