MySQL speichert nur nullen

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hi ich habe ein problem undzwar speichert mysql wenn ich häuser erstelle nur nullen speicher hier der teil aus dem script zum abspeichern der Häuser


    COMMAND:createhouse(playerid,params[])
    {
    new newPreis;
    new Float:px,Float:py,Float:pz,pvir,astring[128],playername[MAX_PLAYER_NAME];
    new h=FreeHouseCheck();
    GetPlayerPos(playerid,px,py,pz);
    if(SpielerInfo[playerid][Adminlevel]==6)
    {
    if(aLogin[playerid]==1)
    {
    if(sscanf(params,"i",newPreis)) return SendClientMessage(playerid,ROT,"Verwendung: /createhouse [Preis]");
    {
    new HouseText[128];
    if(h>=100) return SendClientMessage(playerid,ROT,"Es dürfen keine weiteren Häuser erstellt werden!");
    {
    if(newPreis<=0) return SendClientMessage(playerid,ROT,"Der Preis muss höher als 0€ sein!");
    {
    new query[128];
    format(query,sizeof(query),"INSERT INTO housedata (hID) VALUES ('%i')",
    h);
    mysql_query(query);
    mysql_free_result();
    pvir=GetPlayerVirtualWorld(playerid);
    HouseInfo[h][hID]=h;
    HouseInfo[h][hPreis]=newPreis;
    HouseInfo[h][hSellpreis]=newPreis/2;
    HouseInfo[h][hVir]=pvir;
    HouseInfo[h][hx]=px;
    HouseInfo[h][hy]=py;
    HouseInfo[h][hz]=pz;
    HouseInfo[h][hbuystate]=1;
    HouseInfo[h][hix]=0;
    HouseInfo[h][hiy]=0;
    HouseInfo[h][hiz]=0;
    HouseInfo[h][hiInt]=0;
    HouseInfo[h][hiVir]=h;
    HouseInfo[h][hlock]=1;
    hPickup[h]=CreateDynamicPickup(1273,1,HouseInfo[h][hx],HouseInfo[h][hy],HouseInfo[h][hz]);
    format(HouseText,sizeof(HouseText),"Haus zu verkaufen\n\nHausID: %i\nPreis: %i €\nUm es zu kaufen geben sie /buyhouse ein",HouseInfo[h][hID],HouseInfo[h][hPreis]);
    hText[h]=Create3DTextLabel(HouseText,GRÜN,HouseInfo[h][hx],HouseInfo[h][hy],HouseInfo[h][hz],2,HouseInfo[h][hVir]);
    GetPlayerName(playerid,playername,sizeof(playername));
    format(astring,sizeof(astring),"%s hat Haus ID: %i für %i erstellt",playername,HouseInfo[h][hID],HouseInfo[h][hPreis]);
    Adminlog(astring);
    }
    }
    }
    }
    else return SendClientMessage(playerid,ROT,"Sie sind nicht als Admin eingeloggt!");
    }
    else return SendClientMessage(playerid,ROT,"Sie haben nicht das benötigte Adminlevel!");
    return 1;
    }


    falls ihr noch mehr braucht einfach fragen hoffe ihr könnt mir helfen
    edit es ist nicht nur bei den häusern so sondern auch bei autos und gangbase

    2 Mal editiert, zuletzt von janser123 () aus folgendem Grund: Edit hinzugefügt

  • das liegt an deiner .sql datei ,
    da musst bei der strutur die defautl weg amcehn

  • Hab das nun geändert und ausprobiert und es geht immer noch nicht hier mal den Export der Haus Tabelle


    hier noch mal teile aus dem mysql log

    und eins aus der mitte

    3 Mal editiert, zuletzt von janser123 () aus folgendem Grund: mysql log hinzugefügt

  • Ah ok und diese ganzen fetch field errors im log wie krieg ich die weg ?
    Edit: kann mir denn erklären wie ich die anderen sachen auch noch speicher ?
    Edit2: oder kennt wer nen gutes tutorial wo das erklärt wird
    Edit3: hab mal was versucht nur komm jetzt nicht weiter ist das bist jetzt so richtig? wenn ja wie muss ich weiter machen
    INSERT INTO housedata (hID,hOwner,hPreis,hMPreis,hM,hKasse,hSellpreis,hbuystate,hHeal,hArmour,hWaffenbox,hInt,hVir,hx,hy,hz,hiInt,hiVir,hix,hiy,hiz,hlock,hClubstate,hClub) VALUE

    3 Mal editiert, zuletzt von janser123 ()

  • INSERT
    INTO housedata (hID,hOwner,hPreis,hMPreis,hM,hKasse,hSellpreis,hbuystate,hHeal,hArmour,hWaffenbox,hInt,hVir,hx,hy,hz,hiInt,hiVir,hix,hiy,hiz,hlock,hClubstate,hClub)
    VALUE( ... , ... , ... , ... , )
    Ja,so wäre es theoretisch richtig.
    INSERT funktioniert nicht,wenn du einige Fehler leer lässt die nicht automatisch mit NULL gefüllt werden ( Hab ich jedenfalls bei SQL so im Kopf ). Daher musst du für jedes Feld einen Wert angeben,damit INSERT auch funktioniert und tatsächlich einen neuen Datensatz in die Tabelle schreibt.
    Wenn du das übrigens so machst, stell den String / Array auch groß genug ein,damit auch alles Platz hat ;).


    Solche SQL-Befehle solltest du auch mal lokal testen,ob die überhaupt ausgeführt werden. Gibt doch genug Programme,womit SQL Befehle auf Fehler überprüft werden.

  • Er schreibt den neuen Datensatz auch, wenn nur ein Wert angegeben ist.
    Doch wenn halt kein Standart für die Spalte definiert ist und "NOT NULL" gegeben ist, trägt er halt 0 als Zahl ein (Bei Integers oder Bools), dagegen bleibt ein Varchar oder Text einfach leer
    NULL = unbeschrieben
    0 = einfache Zahl