MySQL not saving new row
#1

So I have been scripting a Marijuana plant system..
I can create the plant successfully, it spawns, all data showing correctly....
when I delete it, it deletes correctly, but it hasnt saved/deleted from MySQL at all during this process

pawn Code:
stock Create_Weed(playerid, weedid, Float:x, Float:y, Float:z)
{
    new createweedstockstring[150];
    GetPlayerPos(playerid, x, y, z);
    WeedPlants[weedid][Exists] = 1;
    WeedPlants[weedid][ID] = cache_insert_id();
    WeedPlants[weedid][Planter] = GetPlayerNameEx(playerid);
    WeedPlants[weedid][PosX] = x;
    WeedPlants[weedid][PosY] = y;
    WeedPlants[weedid][PosZ] = z -1.0;
    WeedPlants[weedid][InteriorID] = GetPlayerInterior(playerid);
    WeedPlants[weedid][WorldID] = GetPlayerVirtualWorld(playerid);
    WeedPlants[weedid][NameTextLabel] = Text3D:INVALID_3DTEXT_ID;
    WeedPlants[weedid][Object] = -1;
    WeedPlants[weedid][Buds] = 20;
    if(WeedPlants[weedid][Exists])
    {
        DestroyDynamic3DTextLabel(WeedPlants[weedid][NameTextLabel]);
        DestroyObject(WeedPlants[weedid][Object]);
        new stringz[90];
        format(stringz, sizeof(stringz), "[%i] {33CCFF}Marijuana Plant | %i Buds | Planter: %s{FFFFFF}", weedid, WeedPlants[weedid][Buds], WeedPlants[weedid][Planter]);
        WeedPlants[weedid][NameTextLabel] = CreateDynamic3DTextLabel(stringz, -1, x, y, z, 5.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, WeedPlants[weedid][WorldID], WeedPlants[weedid][InteriorID], -1, 20.0);
        WeedPlants[weedid][Object] = CreateObject(3409, x, y, z-5.0, 0.0, 0.0, 0.0, 50.0);
        format(createweedstockstring,sizeof(createweedstockstring), "SERVER: {ffff00}%i Marijuana Plant{ffffff} created successfully!",weedid);
        SendClientMessage(playerid, -1, createweedstockstring);
        mysql_format(Database, queryForm, sizeof(queryForm), "INSERT INTO weedplants (id, x, y, z, worldid, interiorid, buds, planter) VALUES(%i, '%f', '%f', '%f', %i, %i, %i, %s)", WeedPlants[weedid][ID], x, y, z, WeedPlants[weedid][WorldID], WeedPlants[weedid][InteriorID], WeedPlants[weedid][Buds], WeedPlants[weedid][Planter]);
        mysql_tquery(Database, queryForm);
        mysql_format(Database, queryForm, sizeof(queryForm), "UPDATE weedplants SET world = %i WHERE id = %i", WeedPlants[weedid][WorldID], WeedPlants[weedid][ID]);
        mysql_tquery(Database, queryForm);
    }
    return 1;
}
pawn Code:
CMD:removeweed(playerid, params[])
{
    if(Player[playerid][AdminLevel] >= 3)//Head Administrator
    {
        new weedid, string[150];

        if(sscanf(params, "i", weedid))
        {
            return SendClientMessage(playerid, -1, "SERVER: /removeweed [weedid]");
        }
        if(!(0 <= weedid < MAX_WEEDPLANTS) || !WeedPlants[weedid][Exists])
        {
            return SendClientMessage(playerid, -1, "SERVER: That Marijuana Plant ID Does not exist.");
        }

        DestroyDynamic3DTextLabel(WeedPlants[weedid][NameTextLabel]);
        DestroyObject(WeedPlants[weedid][Object]);

        mysql_format(Database, queryForm, sizeof(queryForm), "DELETE FROM weedplants WHERE id = %i", WeedPlants[weedid][ID]);
        mysql_tquery(Database, queryForm);
        WeedPlants[weedid][Exists] = 0;
        WeedPlants[weedid][ID] = 0;
        WeedPlants[weedid][PosX] = 0;
        WeedPlants[weedid][Planter] = -1;
        WeedPlants[weedid][ID] = cache_insert_id();
        WeedPlants[weedid][PosX] = 0;
        WeedPlants[weedid][PosY] = 0;
        WeedPlants[weedid][PosZ] = 0;
        WeedPlants[weedid][InteriorID] = 999999;
        WeedPlants[weedid][WorldID] = 999999;
        WeedPlants[weedid][NameTextLabel] = Text3D:INVALID_3DTEXT_ID;
        WeedPlants[weedid][Object] = -1;

        format(string,sizeof(string),"SERVER: You have removed Marijuana Plant ID {ffff00}%i",weedid);
        SendClientMessage(playerid, -1, string);
    }
    else
    {
        SendClientMessage(playerid, -1, "SERVER: You are not authorized to use that command!");
    }
    return 1;
}
Very very confused as it looks like it should be good to go for saving MYSQL, any help or advice would be appreciated thanks
Reply
#2

Why do you need two queries? An INSERT is enough to insert the correct world. For some reason you have two columns `worldid` and `world` according to your code.

Second important note is that you may execute a query but you cannot be certain it was successful. This is the wrong way:
pawn Code:
mysql_tquery(..., "DELETE ...");
WeedPlants[weedid][...] = 0;
If the query fails for whatever reason, you destroyed them in-game but not on database. The correct way is:
pawn Code:
mysql_tquery(..., "DELETE ...", "OnWeedPlantsDeleted", "d", weedid);
pawn Code:
forward OnWeedPlantsDeleted(weedid);
public OnWeedPlantsDeleted(weedid)
{
    WeedPlants[weedid][...] = 0;
}
This is also wrong:
pawn Code:
WeedPlants[weedid][ID] = cache_insert_id();
No active cache.
Reply
#3

^^ Also this
PHP Code:
%
should be
PHP Code:
'%s' 
in your mysql_format for any type of query
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)