Problem mit MySQL

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
  • Hey Leute,


    ich bin dabei ein Selfmade auf MySQL Basis zu schreiben.


    User werden gespeichert und geladen, passt also.
    Nun bin ich bei den Fraktionen, diese werden auch in einer MySQL-DB gespeichert:




    Das ist der Fraktion Enum:




    Das sind die Stocks zum Speichern und Laden:




    Hier werden die Funktionen angesprochen:




    Und der böse Fehler:


    Wo ist der Fehler?


    mfg.
    Anonymousmapping

  • %s ist für Strings, da du aber IDs also Integer verwendest, musst du den Wert ID mit %d im string formatieren.
    EDIT: Du musst enum Fraktion ausbessern auf enum f_fraktion und dann:
    new Fraktion[anzahl_der_Fraktionen][f_fraktion]


    anzahl_der_Fraktionen halt wirklich mit einer Zahl ersetzen.

  • %s ist für Strings, da du aber IDs also Integer verwendest, musst du den Wert ID mit %d im string formatieren.

    Ach ja, hätte mir eig. auch auffallen sollten. Benutze immerhin MySQL im Bereich PHP. Danke für die schnelle Hilfe :)


    mfg.
    Anonymousmapping


    Edit²:
    Weitere Fehler nachdem ich das was ich deinem Edit steht getan habe:


    Spoiler anzeigen
    Edit:
    Fehler bleibt gleich.

    Spoiler anzeigen
    Hier nochmal die Stocks die ich nutze:
    stock LoadFraks(i)
    {
    new query[128];
    format(query, sizeof(query), "SELECT `*` FROM `fraks` WHERE `ID` = '%d'", i);

    Spoiler anzeigen
    Fraktion[i][fName] = mysql_GetString("fraks", "Name", "ID", i);
    Fraktion[i][fLeader] = mysql_GetString("fraks", "Leader", "ID", i);
    Fraktion[i][fKasse] = mysql_GetInt("fraks", "Kasse", "ID", i);
    Fraktion[i][fSpawnx] = mysql_GetInt("fraks", "Spawnx", "ID", i);
    Fraktion[i][fSpawny] = mysql_GetInt("fraks", "Spawny", "ID", i);
    Fraktion[i][fSpawnz] = mysql_GetInt("fraks", "Spawnz", "ID", i);
    Fraktion[i][fInt] = mysql_GetInt("fraks", "Int", "ID", i);
    return 1;
    }

    Spoiler anzeigen
    stock SaveFraks(i)
    {
    mysql_SetString("fraks", "Leader", Fraktion[i][fLeader], "ID", i);
    mysql_SetInt("fraks", "Kasse", Fraktion[i][fKasse], "ID", i);
    return 1;
    }

    Spoiler anzeigen
    stock mysql_GetInt(Table[], Field[], Where[], Is[])
    {
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    new sqlint = mysql_fetch_int();
    mysql_free_result();
    return sqlint;
    }

    Spoiler anzeigen
    stock mysql_GetString(Table[], Field[], Where[], Is[])
    {
    new query[128], Get[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_row(Get);
    mysql_free_result();
    return Get;
    }

    Spoiler anzeigen
    stock mysql_SetInt(Table[], Field[], To, Where[], Where2[])
    {
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Where2, Where2);
    format(query, 128, "UPDATE `%s` SET `%s` = '%d' WHERE `%s` = '%s'", Table, Field, To, Where, Where2);
    mysql_query(query);
    return true;
    }

    Spoiler anzeigen
    stock mysql_SetString(Table[], Field[], To[], Where[], Where2[])
    {
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(To, To);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Where2, Where2);
    format(query, 128, "UPDATE `%s` SET `%s` = '%s' WHERE `%s` = '%s'", Table, Field, To, Where, Where2);
    mysql_query(query);
    return true;
    }

  • stock LFC()
    {
    new str[128];
    new p;
    for(new i; i < MAX_CARS; i++)
    {
    format(str,2,"%d",i);
    FCInfo[i][modelid] = mysql_GetInt("frakcar", "Model", "ID", str);
    FCInfo[i][fcc1] = mysql_GetInt("frakcar", "Farbe", "ID", str);
    FCInfo[i][Frakid] = mysql_GetInt("frakcar", "Fraktion", "ID", str);
    FCInfo[i][fcx] = mysql_GetFloat("frakcar", "X", "ID", str);
    FCInfo[i][fcy] = mysql_GetFloat("frakcar", "Y", "ID", str);
    FCInfo[i][fcz] = mysql_GetFloat("frakcar", "Z", "ID", str);
    FCInfo[i][fca] = mysql_GetFloat("frakcar", "Angle", "ID", str);
    Fraccar[i] = CreateVehicle(FCInfo[i][modelid], FCInfo[i][fcx], FCInfo[i][fcy], FCInfo[i][fcz], FCInfo[i][fca], FCInfo[i][fcc1], FCInfo[i][fcc1], -1);
    p++;
    }
    printf("%d Autos geladen", p);
    }


    Sicher?
    Haste es genauso wie hier oben?

  • So habs nun geschafft jetzt hab ich nur noch 2 Error:

    Code
    D:\GTA - San Andreas\SERVER\gamemodes\NSR.pwn(528) : error 006: must be assigned to an array
    D:\GTA - San Andreas\SERVER\gamemodes\NSR.pwn(529) : error 006: must be assigned to an array
    Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase
    
    
    
    
    2 Errors.


    Edit:
    Die Zeilen:
    FraktionInfo[i][fName] = mysql_GetString("fraks", "Name", "ID", str);
    FraktionInfo[i][fLeader] = mysql_GetString("fraks", "Leader", "ID", str);


    old
    Habs eig. so wie du es hast geändert. Die gleichen Fehler

    old

    old
    stock LoadFraks()
    {
    for(new i = 1; i < 3; i++)
    {
    new query[128];
    new str[16];
    format(str,sizeof(str),"%d",i);
    printf("Fraktion ID: %d wird geladen!", str);
    format(query, sizeof(query), "SELECT `*` FROM `fraks` WHERE `ID` = '%d'", str);

    old

    old
    Fraktion[i][fName] = mysql_GetString("fraks", "Name", "ID", str);
    Fraktion[i][fLeader] = mysql_GetString("fraks", "Leader", "ID", str);
    Fraktion[i][fKasse] = mysql_GetInt("fraks", "Kasse", "ID", str);
    Fraktion[i][fSpawnx] = mysql_GetInt("fraks", "Spawnx", "ID", str);
    Fraktion[i][fSpawny] = mysql_GetInt("fraks", "Spawny", "ID", str);
    Fraktion[i][fSpawnz] = mysql_GetInt("fraks", "Spawnz", "ID", str);
    Fraktion[i][fInt] = mysql_GetInt("fraks", "Int", "ID", str);
    }
    return 1;
    }

    old

    old
    stock SaveFraks()
    {
    for(new i = 1; i < 3; i++)
    {
    printf("Fraktion Nr. %d wird gespeichert!", i);
    mysql_SetString("fraks", "Leader", Fraktion[i][fLeader], "ID", i);
    mysql_SetInt("fraks", "Kasse", Fraktion[i][fKasse], "ID", i);
    printf("Fraktion Nr. %d gespeichert!", i);
    }
    return 1;
    }

    old

    old
    Kann keiner helfen? :/

  • zum einen änder mal dein enum ab.
    enum frak
    {
    fid,
    fname[20],
    fLeader[20],
    fKasse,
    Float:fSpawnx,
    Float:fSpawny,
    Float:fSpawnz,
    fInt,
    }


    Nun zu den warnings
    mysql_GetString("fraks", "Name", "ID", FraktionInfo[i][fName]);
    mysql_GetString("fraks", "Leader", "ID", FraktionInfo[i][fLeader] );


    und noch was zum Thema MySQL gewöhn dir mit sscanf an zu Arbeiten und mit threaded querys da dies schneller und ressourcen schohnender ist.
    Sonst kan man echt davon aus gehen das DINI im vergleich zu dieser verwendung schneller ist.

  • Nicht
    FraktionInfo[i][fName] = mysql_GetString("fraks", "Name", "ID", str);
    sondern
    format(FraktionInfo[i][fName],20,"%s",mysql_GetString("fraks", "Name", "ID", str));


    Das ist ja genau noch dümmer als die verbesserung davor


    mysql_GetString gibt meines erachtens den string an den letzten parameter zurück also an str.
    Was soll daran falsch sein dies nicht direkt auzulesen und nicht erst auszulesen und danach zu übergeben.


    sollte dies nicht so sein das der wert der ausgelesen wird nicht an str zurück gegeben so
    wäre die benutzung von BlackAce-Junior teils richtig


    FraktionInfo[i][fName] = mysql_GetString("fraks", "Name", "ID");


    //edit

    Spoiler anzeigen
    BlackAce-Junior mit BlackAce verwechselt

    Einmal editiert, zuletzt von IPrototypeI ()

  • Das ist ja genau noch dümmer als die verbesserung davor


    mysql_GetString gibt meines erachtens den string an den letzten parameter zurück also an str.


    das find ich wiederrum ne dumme aussage
    Nach Maddins tutorial sollte man schon stringßs formatieren,
    denn ich wüsste nicht das es jetzt funktioniert wenn man es als intger anwendet.
    das ist genauso als wenn du in einer message den namen haben willst das geht auch inden man es formatiert abers wüsste ich es nicht.
    Von daher ist mein weg der richtige. da ich selber weiß das es so richtig ist

    All in all it's just another brick in the wall