MySQL Fehler | R5

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
  • Guten Tag,


    Mein Name lautet CIBERKILLER.
    Und zwar hatte ich diesen Gamemode vor 6 Monaten geschrieben, möchte ich nun aber zum "meisterwerk" machen, zuerst einmal habe ich das ganze auf MySQL umgeschrieben.
    Damals habe ich aber mysql_getint benutzt (maddin like<3).
    Jetzt arbeite ich aber mit while & mysql_retrive_row().


    Und wenn der Spieler geladen wird stürzt der Server ab.


    Skriptcode:
    stock SpielerLaden(playerid)
    {


    ShowEuro(playerid);
    new query[128];
    format(query, sizeof(query), "SELECT * FROM `acc` WHERE `Name`='%s'", GetName(playerid));
    mysql_query(query); mysql_store_result();
    while(mysql_retrieve_row())
    {
    mysql_fetch_field_row(query, "id"), sStats[playerid][sSQLID] = strval(query);
    mysql_fetch_field_row(query, "Euro"), SetPlayerEuro(playerid, strval(query));
    mysql_fetch_field_row(query, "Level"), SetPlayerScore(playerid, strval(query));
    mysql_fetch_field_row(sStats[playerid][sGeschlecht], "Geschlecht");
    mysql_fetch_field_row(query, "Kleidung"), sStats[playerid][sKleidung] = strval(query);
    mysql_fetch_field_row(query, "Adminlevel"), sStats[playerid][sAdmin] = strval(query);
    mysql_fetch_field_row(query, "Alter"), sStats[playerid][sAlter] = strval(query);
    mysql_fetch_field_row(query, "Armor"), sStats[playerid][sArmor] = floatstr(query);
    mysql_fetch_field_row(query, "Wanted"), sStats[playerid][sWanted] = strval(query);
    mysql_fetch_field_row(query, "Fraktion"), sStats[playerid][sFraktion] = strval(query);
    mysql_fetch_field_row(query, "Nummer"), sStats[playerid][sNummer] = strval(query);
    mysql_fetch_field_row(query, "Bankguthaben"), sStats[playerid][sBankMoney] = strval(query);
    mysql_fetch_field_row(query, "Fahrschein"), sStats[playerid][sCarLic] = strval(query);
    mysql_fetch_field_row(query, "Motorradschein"), sStats[playerid][sMotorradLic] = strval(query);
    mysql_fetch_field_row(query, "Flugschein"), sStats[playerid][sFlugLic] = strval(query);
    mysql_fetch_field_row(query, "Truckerschein"), sStats[playerid][sTruckerLic] = strval(query);
    mysql_fetch_field_row(query, "Waffenschein"), sStats[playerid][sWaffenLic] = strval(query);
    mysql_fetch_field_row(query, "Beruf"), sStats[playerid][sBeruf] = strval(query);
    mysql_fetch_field_row(query, "Gehalt"), sStats[playerid][sGehalt] = strval(query);
    mysql_fetch_field_row(query, "Rang"), sStats[playerid][sRang] = strval(query);
    mysql_fetch_field_row(query, "Hitsound"), sStats[playerid][sHitsound] = strval(query);
    mysql_fetch_field_row(query, "Autologin"), sStats[playerid][sAutologin] = strval(query);
    mysql_fetch_field_row(sStats[playerid][sSpawn], "Spawn");
    }
    mysql_free_result();


    SetPlayerArmour(playerid, sStats[playerid][sArmor]);
    TextDrawHideForPlayer(playerid,Textdraw[4]);
    TextDrawHideForPlayer(playerid,Textdraw[5]);
    TextDrawHideForPlayer(playerid,Textdraw[6]);
    TextDrawHideForPlayer(playerid,Textdraw[7]);
    TextDrawHideForPlayer(playerid,Textdraw[8]);
    SetCameraBehindPlayer(playerid);
    Spawn(playerid);
    sStats[playerid][Eingeloggt] = 1;


    SetTimerEx("eingeloggtmove", 250, false, "i", playerid);


    //Zivispawn - VIP
    Schild[0]=CreatePlayerObject(playerid, 19353, 1666.5688, -1901.3144, 15.6568, 0.0000, 0.0000, 82.6349);
    SetPlayerObjectMaterialText(playerid, Schild[0], "V.I.P", 0, 50, "Arial", 24, 0, -16776961, 0, 1);


    Schild[1] = CreatePlayerObject(playerid, 19353, 1660.3814, -1892.7495, 16.8083, -0.1000, 1.5000, -179.9973);
    SetPlayerObjectMaterialText(playerid, Schild[1], "Zivispawn", 0, 100, "Courier New", 45, 0, -65536, 0, 1);
    return 1;
    }


    Wenn ich es ausklammere Funktioniert alles (bis auf das Laden xD).


    Sollte ich das mal Debuggen was meint ihr leute ?


    Mit freundlichen Grüßen,


    CIBERKILLER

    2 Mal editiert, zuletzt von Kasakow ()

  • Jeffry


    Crashdetect spuckt das hier aus:



    Die MySQL Debug(Es wird sehr viel abgefragt)


    Crashinfo:


    OnPlayerRequestClass:
    public OnPlayerRequestClass(playerid, classid)
    {
    if(IsPlayerNPC(playerid))return 1;
    if(mysql_CheckIP(playerid) == 1)
    {
    new string[128];
    format(string, sizeof(string), "* Der IP Gesperrte Spieler %s hat versucht sich einzuloggen!",GetName(playerid));
    SendAdminMessage(playerid, HellRot, string);
    SendClientMessage(playerid, Rot, "Deine IP wurde Gesperrt. Du wirst nun gekickt!");
    Kick_Ex(playerid);
    return 1;
    }
    if(mysql_CheckBan(playerid) == 1)
    {
    new string[128];
    format(string, sizeof(string), "* Der Gesperrte Spieler %s hat versucht sich einzuloggen!",GetName(playerid));
    SendAdminMessage(playerid,HellRot, string);
    SendClientMessage(playerid, Rot, "Dein Account wurde Gesperrt. Du wirst nun gekickt!");
    Kick_Ex(playerid);
    return 1;
    }
    if(strfind(GetName(playerid),"_",true) == -1)
    {
    SendClientMessage(playerid, Rot, "Dies ist kein RolePlay Name (Vorname_Nachname)");
    return Kick_Ex(playerid);
    }
    if(strfind(GetName(playerid),"[",true) != -1 && sStats[playerid][sAdmin] == 0)
    {
    SendClientMessage(playerid, Rot, "Du hast verbotene Zeichen im Namen '['");
    return Kick_Ex(playerid);
    }
    if(mysql_autologin(playerid))
    {
    SpielerLaden(playerid);
    SetCameraBehindPlayer(playerid);
    SendClientMessage(playerid, Weis, "Du hast dich erfolgreich über autologin eingeloggt!");
    return StopAudioStreamForPlayer(playerid);
    }
    return 1;
    }


    Ich werde immer mit autlogin eingeloggt, es liegt also warscheinlich an Spielerladen!

    Einmal editiert, zuletzt von Kasakow ()

  • Jeffry


    Jetzt crash der server nicht mehr. Nur das komische ist: Es gibt die werte im print aus aber ich bekomme das zeug nicht :D
    [21:39:40] CMySQLHandler::FetchRow() - Return: 2|Michael_Weiner|b697b5fed028c19dcbc...|4000|0|0||15|7|0|0|0|0|0|0|0|0|0|0|0|0|0|0||0|0|http://xh244.xeon-hosting.de/JBB.wav


    ^^


    ShowEuro(playerid);
    new query[128];
    format(query, sizeof(query), "SELECT * FROM `acc` WHERE `Name`='%s'", GetName(playerid));
    mysql_query(query); mysql_store_result();
    new result[128];
    mysql_fetch_row(result), print(result);
    while(mysql_retrieve_row())
    {
    mysql_fetch_field_row(query, "id"), sStats[playerid][sSQLID] = strval(query);
    mysql_fetch_field_row(query, "Euro"), SetPlayerEuro(playerid, strval(query));
    mysql_fetch_field_row(query, "Level"), SetPlayerScore(playerid, strval(query));
    mysql_fetch_field_row(sStats[playerid][sGeschlecht], "Geschlecht");
    mysql_fetch_field_row(query, "Kleidung"), sStats[playerid][sKleidung] = strval(query);
    mysql_fetch_field_row(query, "Adminlevel"), sStats[playerid][sAdmin] = strval(query);
    mysql_fetch_field_row(query, "Alter"), sStats[playerid][sAlter] = strval(query);
    mysql_fetch_field_row(query, "Armor"), sStats[playerid][sArmor] = floatstr(query);
    mysql_fetch_field_row(query, "Wanted"), sStats[playerid][sWanted] = strval(query);
    mysql_fetch_field_row(query, "Fraktion"), sStats[playerid][sFraktion] = strval(query);
    mysql_fetch_field_row(query, "Nummer"), sStats[playerid][sNummer] = strval(query);
    mysql_fetch_field_row(query, "Bankguthaben"), sStats[playerid][sBankMoney] = strval(query);
    mysql_fetch_field_row(query, "Fahrschein"), sStats[playerid][sCarLic] = strval(query);
    mysql_fetch_field_row(query, "Motorradschein"), sStats[playerid][sMotorradLic] = strval(query);
    mysql_fetch_field_row(query, "Flugschein"), sStats[playerid][sFlugLic] = strval(query);
    mysql_fetch_field_row(query, "Truckerschein"), sStats[playerid][sTruckerLic] = strval(query);
    mysql_fetch_field_row(query, "Waffenschein"), sStats[playerid][sWaffenLic] = strval(query);
    mysql_fetch_field_row(query, "Beruf"), sStats[playerid][sBeruf] = strval(query);
    mysql_fetch_field_row(query, "Gehalt"), sStats[playerid][sGehalt] = strval(query);
    mysql_fetch_field_row(query, "Rang"), sStats[playerid][sRang] = strval(query);
    mysql_fetch_field_row(query, "Hitsound"), sStats[playerid][sHitsound] = strval(query);
    mysql_fetch_field_row(query, "Autologin"), sStats[playerid][sAutoLogin] = strval(query);
    mysql_fetch_field_row(sStats[playerid][sSpawn], "Spawn");
    }
    mysql_free_result();

  • Gut!
    Jetzt kannst du die ganze while-Schleife weg machen.


    Dann nimm dir genau diesen Post als Beispiel: MYSQL Lädt falsche werte
    string in dem Post entspricht "result" bei dir, musst entweder "result" zu "string" umbenennen, oder andersrum.


    Dann bei den case's die jeweiligen Variablen setzen.


    EDIT:
    0 = id
    1 = Name
    2 = Passwort hash
    etc... (du weißt ja wie deine DB aufgebaut ist.)


    Wenn du einen Wert nicht auslesen willst, lasse die case ID einfach aus.

  • Ja, splitten.
    Die while-Schleife (und alles was darin ist) entfernen und das an die Stelle setzen:


    strins(string, "|", strlen(string));
    new oldi=0;
    new count=0;
    for(new i=0; i<strlen(string); i++)
    {
    if(string[i]=='|')
    {
    count++;
    new tmpstring[sizeof(string)]; tmpstring=string;
    strdel(tmpstring, i, strlen(tmpstring));
    strdel(tmpstring, 0, oldi+1);
    switch(count)
    {
    case 1: id = strval(tmpstring);
    case 2: format(name, sizeof(name), "%s", tmpstring);
    case 3: x = floatstr(tmpstring);
    case 4: y = floatstr(tmpstring);
    case 5: z = floatstr(tmpstring);
    case 6: a = floatstr(tmpstring);
    case 7: interior = strval(tmpstring);
    //usw...
    }
    oldi=i;
    }
    }


    Dann bei den case's deine Variablen (sStats[playerid][sSQLID], etc) an die richtige Stelle setzen und mit strval (Integer), format (String) oder floatstr (Float) auslesen.


    Nicht vergessen das vorherige "result" zu "string" umzubenennen, oder andersrum.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Beitrag von Kasakow ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Beitrag von Kasakow ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • do.de - Domain-Offensive - Domains für alle und zu super Preisen